2015-01-07 8 views
0

У меня есть div с множеством объектов SVG в нем.Как получить текущую позицию мыши при перемещении по объекту SVG?

<div id="outerDiv"> 
<div id="widget1"> 
    <object type="image/svg+xml" data="my.svg"></object> 
</div> 
<div id="widget2"> 
    <object type="image/svg+xml" data="my.svg"></object> 
</div> 
<div id="widget3"> 
    <object type="image/svg+xml" data="my.svg"></object> 
</div> 
... 
</div> 

Как я могу получить текущее положение мыши, когда курсор находится над одним из этих объектов svg?

Sidenote: без extern libs, таких как D3, Snap ... только jQuery разрешено.

Это не работает, потому что Я не получаю никакого события mousemove, когда я перемещаюсь по объекту SVG.

var mousemoveHandler = function (event) { 
    event.preventDefault(); 
    console.log("doc.mousemove: " + event.pageX + " " + event.pageY); 
}; 
$(document).on("mousemove", mousemoveHandler); 

Кроме того, обработчик MouseMove на SVG элемента (например, невидимым г-элемент) возвращает только относительное mouseposition.

Редактировать: Объекты svg не имеют обработчиков событий, которые могут остановить распространение события.

+2

event.clientX; event.clientY? –

+0

Проблема в том, что я не получаю никакого события, когда я перемещаюсь по SVG ... так что клиент и клиент тоже не работают. – Frank

+0

Сделайте SVG образ, если вы хотите обработать мышь за ее пределами (т. Е. В родительском документе). В противном случае обработайте мышь внутри самого документа SVG. –

ответ

1

элементы SVG в пределах ваших элементов из объектов обработки всех событий мыши. Вы можете отключить это, добавив указатель-события стиля: none к тегам объекта.

0

Ваше событие mousemoveHandler никогда не срабатывает. использование вместо

$('object').hover(mousemoveHandler); 

Если это не работает, вы можете добавить класс на виджеты и свяжете на классе.

EDIT:

<div id="outerDiv"> 
<div id="widget1"> 
    <object type="image/svg+xml" data="my.svg"></object> 
</div> 
<div id="widget2"> 
    <object type="image/svg+xml" data="my.svg"></object> 
</div> 
<div id="widget3"> 
    <object type="image/svg+xml" data="my.svg"></object> 
</div> 
... 
</div> 

правильно HTML код закрыт с другим тегом.

изменение <object type="image/svg+xml" data="my.svg"/>
в <object type="image/svg+xml" data="my.svg"></object>

+0

привязан к документу ... поэтому он запускается каждый раз, когда я нажимаю мышь на весь документ. Но он не работает, когда я вхожу в один из объектов svg. – Frank

+0

нашел вашу ошибку, я думаю. будет редактировать. – Mephiztopheles

+0

моя ошибка ... укоротил исходный код слишком много. его правильный html :-) – Frank

Смежные вопросы