需要在javascript中设置一个计时器,然后清除

时间:2015-04-21 22:05:54

标签: javascript timer

我想在JavaScript中创建一个计时器。我看到了setTimeout(fn, 100),但不清楚如何包装它,所以最终会清除它。

我试过

var buttonTimer = null; 

$scope.backButton = function() {

    if(buttonTimer === null){
        $history.back();
    }

    buttonTimer = setTimeout(function(buttonTimer){
        buttonTimer = null;
    }, 100);

}

重点是防止用户过快地点击此功能..并忽略该100ms窗口内所有后续点击,在窗口结束时,清除计时器并恢复接受点击

2 个答案:

答案 0 :(得分:1)

由于你正在做角度,我准备了一个plnkr用于演示: http://plnkr.co/edit/5qrslKpmkglXTvEyYgBr?p=preview

您的代码几乎没问题,唯一的问题是您每次点击都会启动新的超时。结果是,回调会多次触发并重置buttonTimer

所以唯一的变化是:

var blocker = null;
$scope.backButton = function() {
  if(blocker == null) {
    blocker = setTimeout(function(){
      blocker = null;
    }, 1500);

    // DO YOUR STUFF HERE
  }    
};

答案 1 :(得分:0)

你可以使用lodash / underscore或Ramdajs的节流。 例如

$scope.backButton=_.throttle(100,function(){/* do something here */});