我需要能够根据元素悬停的时间取消事件。假设当我将延迟设置为500毫秒时,当元素被徘徊不到时,应该取消一个事件,否则它被触发。 delay()
和setTimeout()
函数似乎无法执行此操作。
答案 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函数,可能更适合某些用途 例。
不确定这是不是你的意思。