Вы можете отслеживать положение мыши:
$(document).mousemove(function(e){
x = e.pageX; // globals, but you could tie them to a namespace or whatever
y = e.pageY;
});
Преимущество здесь в том, что вам не нужно беспокоиться о связывании / откреплении целой группы событий наведения для целого ряда различных элементов. Затем вы можете спросить (в любое время, в отличие от моего второго решения), находится ли позиция мыши в пределах координат какого-либо элемента.
Вы можете предпочесть связать его не в анонимной функции, чтобы можно было отсоединить его (из соображений производительности и т. П.).
Одним из недостатков этого подхода является то, что mousemove()
срабатывает только при перемещении мыши, хотя при прокрутке с клавиатуры положение мыши в документе изменилось без срабатывания события. Это не применимо к вашему решению (по крайней мере, с моим примитивным тестом jsFiddle в FF). Вы можете исправить это, обновив координаты с помощью события keypress
или чего-то подобного, хотя это усложняет ситуацию, а вам нужно просто.
Кроме того, вы можете использовать объект события, заданный для событий, и запрашивать положение мыши непосредственно из соответствующего события. Допустим, вам нужно только проверить, была ли мышь в данном div, когда произошло простое событие, скажем, пользователь где-то вызвал mouseup()
, тогда вы просто ссылаетесь на имеющийся у вас объект события:
someDiv.mouseup(function(e){
// ...
// other stuff
// ...
if (ns.isMouseInDiv(someOtherDiv, e))
foo();
});
Опять же, вы избавляетесь от необходимости привязываться к каждому объекту, который хотите проверить.