2010-06-17 3 views
0

Если я использую, например, обработчик события mousemove на div и проверяю свойство layerX события, он изменяется, когда моя мышь входит в позиционный элемент внутри этого div (например, изображение).jQuery event.layerX/Y не относится к элементу, вызвавшему событие, это правильно?

Согласно the jQuery Event object documentation, он должен следовать техническим требованиям W3C DOM Level 3. Но не упоминается свойство layerX/Y для the MouseEvent interface, поэтому мне интересно, какое поведение соответствует спецификации?

Мне кажется, что вы всегда хотите, чтобы layerX/Y был относительно слоя, который запускает событие, если мне нужен слой X/Y вложенного элемента, я бы проверил событие на другой фазе (пузырящийся) или привяжет мой обработчик к этому вложенному элементу.

Мой вопрос (несколько субъективный): как должен слойX/Y работать?

ответ

1

Я бы подумал, что layerx/y будет смещением от первого родительского узла элемента стрельбы, у которого есть позиция (относительная или абсолютная). В любом случае, JQuery имеет лучшие способы поиска позиции, как это и также Layerx/Y не может быть гарантировано быть одинаковым в любом браузере, так что я бы не использовать его

+0

Спасибо, я изменил код, чтобы использовать комбинацию element.offset() слева и e.clientX –

+0

Layerx и layerY были устаревшее в Chrome v17 – rxgx

2

вы также можете использовать:

var x = e.pageX - this.offsetLeft;

var y = e.pageY - this.offsetTop;

Это почти то же самое, что и с использованием свойств jQuery element.offset(), но вместо этого этот метод использует собственные свойства offsetTop и offsetLeft.

находится вблизи дна: jQuery - Tutorials: Mouse Position

+0

offsetLeft и offsetTop. относятся к offsetParent, а не к странице. Вам нужно будет перебрать все offsetParents. –