JQuery мышь в div - PullRequest
       3

JQuery мышь в div

0 голосов
/ 20 января 2011

Я гуглю и смотрю на Stackoverflow, но не могу найти ответ.

Есть ли простой способ узнать, является ли мышь в делении или нет (зависание)?

Единственное решение, которое я мог придумать, это:

$("#somediv").hover(
  function() {
    $(this).data("in", true);
  },
  function() {
    $(this).removeData("in");
});

, а затем проверить:

if ($("#somediv").data("in")) {
   ...
}

Неужели нет более легкого пути?

Ответы [ 3 ]

1 голос
/ 20 января 2011

Вы можете отслеживать положение мыши:

$(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();

});

Опять же, вы избавляетесь от необходимости привязываться к каждому объекту, который хотите проверить.

1 голос
/ 20 января 2011

Разве вы не можете просто установить переменную onmouseover и отменить ее отключение?

0 голосов
/ 20 января 2011

Тогда в обработчике события всплывающего окна значка можно было проверить, имеет ли диалоговое окно div псевдокласс: hover. Как:

if($("#dialog:hover").length)){
    ...
}

Хотя не пробовал ... Я хотя бы получил то, что ты пытаешься сделать? ;)

ОБНОВЛЕНИЕ: попробуйте здесь: http://jsfiddle.net/cpak/MBJ6Q/

Как упомянуто в комментарии ниже, требуется мышь, чтобы перейти непосредственно от иконки к диалоговому окну.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...