使用不同的参数每隔X秒调用一个方法

时间:2014-08-05 18:11:11

标签: javascript jquery

仅供参考:我知道有很多“如何使用JavaScript每隔X秒调用一个方法”问题;这是略有不同所以请不要标记为重复,除非它确实是。

问题:我有一个方法move,它接受​​一个方向参数(即rlu或{{ 1}})。我希望每隔X秒使用一个参数调用d方法,但我希望它“取消”运行任何其他参数的当前move间隔。例如,如果我每1秒运行move,然后触发move('r')事件每1秒运行一次,我想取消move('d')方法。

代码:

move('r')

修改 谢谢大家的精彩答案。下面几个答案的轻微组合让我完成了我的项目(好吧,差不多) - http://jsfiddle.net/thomasmclaughlin/8c9ww/ - 再次感谢!

4 个答案:

答案 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);
});