我想在JavaScript中创建一个计时器。我看到了setTimeout(fn, 100)
,但不清楚如何包装它,所以最终会清除它。
我试过
var buttonTimer = null;
$scope.backButton = function() {
if(buttonTimer === null){
$history.back();
}
buttonTimer = setTimeout(function(buttonTimer){
buttonTimer = null;
}, 100);
}
重点是防止用户过快地点击此功能..并忽略该100ms
窗口内所有后续点击,在窗口结束时,清除计时器并恢复接受点击
答案 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 */});