Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mootools定期功能和时间倒带_Javascript_Mootools - Fatal编程技术网

Javascript Mootools定期功能和时间倒带

Javascript Mootools定期功能和时间倒带,javascript,mootools,Javascript,Mootools,我有一些函数是定期调用的: var func = function() { alert('Hello world!'); }; func.periodical(5000); 此函数也可通过单击事件调用: $('element').addEvent('click', function(){ func(); }); 计时器开始计时2500毫秒,然后我单击$('element'),执行func(),我现在想重置计时器,使func()不会在接下来的2500毫秒内调用,而是在接下来的5

我有一些函数是定期调用的:

var func = function() {
    alert('Hello world!');
};
func.periodical(5000);
此函数也可通过
单击
事件调用:

$('element').addEvent('click', function(){
    func();
});
计时器开始计时2500毫秒,然后我单击
$('element')
,执行
func()
,我现在想重置计时器,使
func()
不会在接下来的2500毫秒内调用,而是在接下来的5000毫秒内调用


如何做到这一点?

我认为最简单的方法是,如果函数检测到它自上次运行以来已少于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);
});
var func=(函数(){
var ts=新日期();
返回功能(强制){
var now=新日期();
如果(!强制和立即-ts<5000)
返回;
警惕(“嗨!”);
ts=现在;
};
})();
本刊(5000);
$('element')。addEvent('click',function(){
func(真);
});

在事件处理程序中,使用一个参数调用函数,该参数强制函数忽略计时器。当然,这种机制有点脆弱。

您可以删除定期间隔,并在单击元素时重新设置。为了避免携带额外的变量,可以将计时器引用存储在函数对象本身中

func.timer = func.periodical(5000);

$('element').addEvent('click', function() {
    func();
    $clear(func.timer);
    func.timer = func.periodical(5000);
});

这不是这样做的方式。这样做的好处是它比给出的其他答案更能让计时器“准时”。用新的5秒超时重新开始对我来说更糟糕。