Мне нужна кнопка, которую можно нажать один раз, чтобы выполнить одну команду. Но также нужно удерживать кнопку и выполнять команду несколько раз, удерживая кнопку. Я использую AngularJs (хотя я не думаю, что это связано с проблемой)js угловая кнопка hold loop failing
Что было до сих пор:
<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). С тех пор я получаю ошибки «Максимальный размер стека вызовов».
http://stackoverflow.com/questions/25180332/how-can-i-listen-for-a-click-and-hold-in-angularjs – CoderHawk
@ CoderHawk, я видел этот вопрос и вдохновил на это свое первоначальное решение. Но использование директив - другой подход. –