仅供参考:我知道有很多“如何使用JavaScript每隔X秒调用一个方法”问题;这是略有不同所以请不要标记为重复,除非它确实是。
问题:我有一个方法move
,它接受一个方向参数(即r
,l
,u
或{{ 1}})。我希望每隔X秒使用一个参数调用d
方法,但我希望它“取消”运行任何其他参数的当前move
间隔。例如,如果我每1秒运行move
,然后触发move('r')
事件每1秒运行一次,我想取消move('d')
方法。
代码:
move('r')
修改 谢谢大家的精彩答案。下面几个答案的轻微组合让我完成了我的项目(好吧,差不多) - http://jsfiddle.net/thomasmclaughlin/8c9ww/ - 再次感谢!
答案 0 :(得分:4)
为您的间隔设置全局计时器变量
var myInterval = null;
现在有一个设置间隔的方法,但首先检查一个是否在进行中:
function startInterval(r, l, u, d) {
if (myInterval != null) clearInterval(myInterval)
myInterval = setInterval(function() {
move(r, l, u, d);
}, 500);
}
现在每次拨打startInterval
时,如果有当前间隔,它将取消当前间隔并开始新的间隔。
答案 1 :(得分:1)
这样的事情会更好。简单地更新变量,并将其传递给函数。
$x = '';
$(document).keydown(function(event) {
if(event.which == RIGHT){
$x = 'r';
} else if (event.which == LEFT) {
$x = 'l';
} else if (event.which == UP){
$x = 'u';
} else if (event.which == DOWN){
$x = 'd';
}
});
window.setInterval(function(){
move($x);
}, 500);
答案 2 :(得分:0)
一旦考虑改变跟踪移动的方法。我建议将你的“移动”保持在一个小的数组x和y中。通过设置x或您希望修改的原因
来设置当前移动'u' move=[-500,0]
'd' move=[500,0]
'l' move=[0,-500]
'd' move=[0,500]
答案 3 :(得分:0)
我亲自去做的方式完全不同,但这里有一个伪代码/真实代码混合:
var key = 0;
$(document).keydown(function(e) {
//check the event.which here, and set them to 1-4 depending on the event.which
});
$(document).keyup(function() {
key = 0;
});
$(document).ready(function() {
setInterval(move(key), 500);
});