Мне нужна кнопка, которую можно нажать один раз, чтобы выполнить одну команду. Но также должна быть возможность удерживать кнопку и выполнять команду несколько раз, удерживая кнопку. Я использую AngularJs (хотя я не думаю, что это связано с проблемой)
Что у меня было до сих пор:
<button type="button"
class="btn btn-default"
ng-click="ChangeSetPoint('Up')"
ng-mousedown="startLoopingUp()"
ng-mouseup="stopLoopingUp()"
ng-mouseleave="stopLoopingUp()">
+
</button>
и в контроллере:
$scope.ChangeSetPoint = function(direction){
//Stuff to actually change the setpoint
}
var looping = false;
var promis;
$scope.startLoopingUp = function(){
looping = true;
promis = setTimeout(loop('Up'),1000);
}
var loop = function(direction){
$scope.ChangeSetPoint(direction);
if(looping){
promis = setTimeout(loop(direction),300)
}
}
$scope.stopLoopingUp = function(){
looping = false;
clearTimeout(promis);
}
Это работало до того, как я использовал этот параметр «направление». Раньше я использовал arguments.callee в setTimeout, но когда я посмотрел, как передать аргумент с помощью этой функции, я заметил, что использование arguments.callee
не рекомендуется (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee а>). С тех пор я получаю ошибки «Превышен максимальный размер стека вызовов».