需要为 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 */});
我想在 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 */});