需要为 in javascript 设置一个定时器,然后清除

need to set a timer for in javascript , then clear

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

我试过

var buttonTimer = null; 

$scope.backButton = function() {

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

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

}

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

既然你在做angular,我准备了一个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
  }    
};

您可以使用 lodash/underscore 或 Ramdajs 的油门。 例如

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