我有一些函数taht是定期调用者:
var func = function() {
alert('Hello world!');
};
func.periodical(5000);
此函数也使用click
事件调用:
$('element').addEvent('click', function(){
func();
});
计时器启动并计数2500毫秒,然后我点击$('element')
,执行func()
,我现在想要重置func()
在下一个2500毫秒内不会被调用的计时器,但是跟随5000毫秒。
怎么做?
答案 0 :(得分:2)
您可以删除定期间隔,并在单击元素时再次设置。为了避免携带额外的变量,可以将定时器引用存储在函数对象本身中。
func.timer = func.periodical(5000);
$('element').addEvent('click', function() {
func();
$clear(func.timer);
func.timer = func.periodical(5000);
});
答案 1 :(得分:0)
我认为最简单的事情就是让函数返回,如果它检测到它自上次运行以来已经小于5000毫秒。
var func = (function() {
var ts = new Date();
return function(force) {
var now = new Date();
if (!force && now - ts < 5000)
return;
alert("Hi!");
ts = now;
};
})();
func.periodical(5000);
$('element').addEvent('click', function() {
func(true);
});
在事件处理程序中,使用一个强制它忽略计时器的参数调用该函数。这个机制当然有点脆弱。