2015-04-21 2 views
1

Я хочу создать таймер в JavaScript. Я вижу setTimeout(fn, 100), но неясно, как обернуть это, чтобы он очистился в конце.нужно установить таймер для javascript, затем очистить

Я пытался делать

var buttonTimer = null; 

$scope.backButton = function() { 

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

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

} 

Все дело в том, чтобы запретить пользователю ударять эту функцию слишком быстро .. и игнорируя все последующие клики в пределах этого 100ms окна, в конце окна, снимите таймер и возобновить прием кликов

ответ

1

Поскольку вы делаете угловатые, я подготовил plnkr для демонстрации: http://plnkr.co/edit/5qrslKpmkglXTvEyYgBr?p=preview

Ваш код почти Ok, единственная проблема что вы начинаете новый тайм-аут при каждом нажатии. Эффект заключается в том, что обратный вызов срабатывает несколько раз и сбрасывает buttonTimer.

Так что единственное изменение:

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

    // DO YOUR STUFF HERE 
    }  
}; 
0

Вы можете использовать газ из lodash/подчеркивания или Ramdajs. например

$scope.backButton=_.throttle(100,function(){/* do something here */}); 
Смежные вопросы