如何在jQuery中得到这个:在延迟(3s)之后调用一些带有工作代码的函数,如果我在第一次调用延迟之前再次调用函数,则重置延迟并调用新的3s。
示例:
fce MeDeday(3s) - 时间过后 - 警告(“你好”);
情况1:
调用MeDelay() - time down - alert(“hello”)
情况2:
致电MeDelay()
第一次通话仍然是2秒
重置时间并再次等待3s,没有2s + 5s并且发出2次警报(“你好”)
调用MeDelay() - time down - alert(“hello”)
答案 0 :(得分:4)
这称为 debouncing,,与限制密切相关。有一个很好的jQuery插件:jQuery throttle/debounce。
我认为这是您正在寻找的用例:
function fn()
{
alert('hello');
}
var debouncedFn = $.debounce(3000, fn);
$('#my-button').click(debouncedFn);
的 Demo → 强> 的
答案 1 :(得分:4)
没有jQuery:
var MeDelay = (function() {
var timer;
return function(timeout) {
timeout = timeout || 3000;
if(timer) {
clearTimeout(timer);
}
timer = setTimeout(function() {
alert('hello');
}, timeout);
}
}());