停止重复检测鼠标

时间:2010-07-31 15:58:47

标签: javascript jquery

我有一个用jquery在mouseover上执行的弹出窗口。

在该功能中,我在使用settimeout

显示弹出窗口之前有第二次延迟

问题是,如果在那一秒内他们多次鼠标移动,则会触发多个弹出窗口。

$('#div').mouseover(function() {setTimeout("popup()",1000);});

我需要做的是禁用检测,然后在popup()中重新启用它。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以将.hover()clearTimeout()一起使用,如下所示:

$('#div').hover(function() {
  $.data(this, 'timer', setTimeout(popup, 1000)); 
}, function() {
  clearTimeout($.data(this, 'timer'));
});

如果鼠标离开,这将清除您设置的超时,您必须在元素上停留一整秒才能触发弹出窗口。我们只是在元素上使用$.data()来存储计时器ID(所以我们知道要清除什么)。另一个变化是不将字符串传递给setTimeout(),而是直接引用该函数。

答案 1 :(得分:1)

我想这样的事情

(function(){
    var popup_timer = 0;
    $('#div').mouseover(function() { 
        clearTimeout(popup_timer);
        popup_timer = setTimeout("popup()",1000);
    });
});

编辑更新的代码,clearTimeout添加,包装