没有达到延迟时取消活动?

时间:2011-08-23 14:23:48

标签: javascript jquery

我需要能够根据元素悬停的时间取消事件。假设当我将延迟设置为500毫秒时,当元素被徘徊不到时,应该取消一个事件,否则它被触发。 delay()setTimeout()函数似乎无法执行此操作。

3 个答案:

答案 0 :(得分:1)

你可以尝试这样的东西,而不是使用jQuery delay方法。

正在使用 demo

var timeoutId = null;
$("selector").hover(function(){
   if(timeoutId)
      clearTimeout(timeoutId);

    timeoutId = setTimeout(function(){
        alert("do your stuff here");
    }, 5000); 
}, function(){
    clearTimeout(timeoutId);
});

答案 1 :(得分:0)

有人可能会想出更清洁的东西,但下面的代码将能够处理您的要求。在事件内的代码再次被触发之前,它需要500毫秒才能通过。可能会清理它,以便timer / delayMet不是 潜在的 全局变量。

我正在使用$('a').click作为示例选择器和事件。

var timer, 
    delayMet = true;

$('a').click(function () {

  if(delayMet === true) {
    // your code here
  }
  else {
    delayMet = false;
    setTimeout(function () {
      delayMet = true;
    }, 500);
  }
});

答案 2 :(得分:0)

您可以通过执行以下操作取消setTimeout()

var timer = setTimeout(function(){...},5000);
...
clearTimeout(timer);

来自jQuery .delay() docs:

  

.delay()方法最适合在排队的jQuery之间延迟   效果。因为它是有限的 - 例如,它没有提供一种方法   取消延迟-.delay()不是JavaScript本机的替代品   setTimeout函数,可能更适合某些用途   例。

不确定这是不是你的意思。