Как я могу игнорировать все дочерние элементы с JQuery - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть этот код:

$('.div2').mousemove(function(e) {
    var posX = (50 - (e.offsetX) / $(this).width() * 100);
    var posY = (-50 + (e.offsetY) / $(this).height() * 100);
    $('.results').html(posX+', '+posY);
});

И этот HTML:

<div class="div1">
  <div class="div2">
    <ul>
      <li>Item 1</li>
      <li>Item 2</li>
      <li>Item 3</li>
    </ul>
  </div>
</div>
<div class="results"></div>

это работает только тогда, когда mouser не наводит предметы ... как я могу их игнорировать, но получая правильное значение?

Я пробовал:

if(e.target != this){
    return true;
}

но не получите правильное значение для предметов ...

1 Ответ

1 голос
/ 29 апреля 2011

Добро пожаловать в переполнение стека!

Используйте атрибуты события layerX и layerY, чтобы получить нужные значения. Атрибуты offsetX и offsetY всегда относятся к элементу, который находится под курсором, даже если событие связано с родительским элементом. То же относится и к атрибуту target.

Кроме того, я предпочитаю использовать currentTarget, поскольку он немного облегчает чтение и понимание вашего кода без отслеживания происхождения this.

$('.div2').mousemove(function(e) {
    var posX = (50 - (e.layerX) / $(e.currentTarget).width() * 100);
    var posY = (-50 + (e.layerY) / $(e.currentTarget).height() * 100);
    $('.results').html(posX+', '+posY);
});

Проверьте мой контрольный пример на jsFiddle

...