当未满足延迟时取消事件
Cancel event when delay was not met?
我需要能够根据元素悬停的时间取消事件。例如,当我将延迟设置为500毫秒时,当元素悬停的时间少于500毫秒时,应该取消事件,否则将触发事件。delay()
和setTimeout()
函数似乎无法做到这一点。
你可以尝试这样做,而不是使用jQuery的delay
方法。
var timeoutId = null;
$("selector").hover(function(){
if(timeoutId)
clearTimeout(timeoutId);
timeoutId = setTimeout(function(){
alert("do your stuff here");
}, 5000);
}, function(){
clearTimeout(timeoutId);
});
有人可能会想出一些更干净的东西,但下面的代码将能够处理您的问题。它需要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);
}
});
您可以通过以下操作取消setTimeout()
。
var timer = setTimeout(function(){...},5000);
...
clearTimeout(timer);
jQuery .delay() docs:
.delay()方法最适合在排队的jQuery之间延迟效果。因为它是有限的,例如,它没有提供一种方法.delay()不能替代JavaScript的nativesetTimeout函数,它可能更适合某些用途例。
我不确定这是不是你的意思。
相关文章:
- 取消绑定主干视图事件
- 阻止浏览器对keydown事件作出反应,但不取消该事件
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 从父元素取消绑定滚动事件并绑定到子元素
- 网格取消事件未启动
- 按键处理程序取消事件
- 取消拖动&选择事件
- 正在取消IE11中的JavaScript事件
- 使用 ng-change 对输入类型数据进行 JavaScript 取消事件
- 如何在jquery/JavaScript中打开浏览文件对话框时执行取消事件
- 脸书图FB.登录连接对话框,取消事件
- 使用 jquery mouseout 取消事件
- 当我通过javascript添加警报并取消事件时,滚动条消失了
- 在输入类型=“文件”上取消事件
- 取消事件后如何继续事件传播
- Facebox取消事件
- 当未满足延迟时取消事件
- 如何取消事件处理程序/侦听器
- 页面加载取消事件
- 在javascript / jquery中取消事件mousedown