代码之家  ›  专栏  ›  技术社区  ›  hsz

Mootools的周期函数与时间倒带

  •  1
  • hsz  · 技术社区  · 14 年前

    var func = function() {
        alert('Hello world!');
    };
    func.periodical(5000);
    

    此函数也称为 click 事件:

    $('element').addEvent('click', function(){
        func();
    });
    

    计时器开始计时2500毫秒,然后我点击 $('element') , func() 函数() 不会在接下来的2500毫秒内调用,而是在接下来的5000毫秒内调用。

    怎么做?

    2 回复  |  直到 12 年前
        1
  •  2
  •   Anurag    14 年前

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

    func.timer = func.periodical(5000);
    
    $('element').addEvent('click', function() {
        func();
        $clear(func.timer);
        func.timer = func.periodical(5000);
    });
    
        2
  •  0
  •   Pointy    14 年前

    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);
    });
    

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