jQuery:鼠标还在元素上吗?

时间:2009-12-07 00:48:06

标签: jquery jquery-plugins events hover mouseover

我希望能够在以下场景中检测鼠标是否仍然在元素上:

  1. 如果鼠标悬停,请等待几秒钟。
  2. 一旦完成睡眠检查,鼠标仍然在同一个元素上。
  3. 如果是,那就做点什么。
  4. 如何实现#2?

    谢谢。

6 个答案:

答案 0 :(得分:37)

这似乎有效(http://jsbin.com/uvoqe

$("#hello").hover( function () {
  $(this).data('timeout', setTimeout( function () {

    alert('You have been hovering this element for 1000ms');

  }, 1000));
}, function () {

  clearTimeout($(this).data('timeout'));

});

答案 1 :(得分:15)

看一下jQuery的hoverIntent插件。它为您提供了一个新的事件处理程序,只有当您将元素悬停在元素上一段时间后才会触发它。通过调整其选项,您应该能够让它完全按照您的意愿完成。

答案 2 :(得分:10)

只需使用一个标志告诉您鼠标是否在它上面。

var mouseover = false;
$('.thing').mouseenter(function(){
    mouseover = true;
}).mouseleave(function(){
    mouseover = false;
});

答案 3 :(得分:2)

这是一种方式:

在元素上设置.hover()时,可以向其传递2个函数。当鼠标移出元素时,第一个将触发,当鼠标移出时,第二个将触发。

第一个函数可以设置currentElementId(或其他一些标志),第二个函数将清除它。这样,您唯一需要做的就是检查currentElementId是否为空。

答案 4 :(得分:1)

您可以在设定的时间后使用setTimeout( 'sleep', sleep_time )来调用函数。

将事件处理程序分配给onmouseover和onmouseout。

这些处理程序修改标志以检查鼠标是否仍在元素上。

在睡眠功能内部,您可以检查标志,然后将其返回。

答案 5 :(得分:1)

我使用超链接显示div,然后在hover事件中设置了此属性的超时属性,并在我转到div后立即清除超时并启动使用div的{​​{1}}函数淡出hover。我希望这会对你有所帮助。

div