Javascript在被清除后重新运行超时

时间:2015-06-12 15:46:51

标签: javascript jquery timeout settimeout

我有一个带参数的函数对这些参数进行一些操作,然后在某些超时时再次将它们发送给自己 现在我想清除这个超时,但在某些时候我想回忆一下用当前参数清除的超时无论如何要做到这一点?

var thread
$(document).ready(function(){
    f(0, 0)

    $('.pause').click(function(){
        clearTimeout(thread);
    });

    $('.resume').click(function(){
        thread; //want to rerun thread
    });

    f(x, y) {
        thread = setTimeout(function(){
            f(x + 1, y + 1);
        }, 1000)
    }

2 个答案:

答案 0 :(得分:1)

您只需要在f(0, 0)点击处理程序中再次调用resume

$('.resume').click(function(){
    f(0, 0);
});

如果您想要暂停xy值暂停的位置,则需要先将它们存储起来。试试这个:

var thread;

$(document).ready(function(){
    var publicX, publicY; 

    f(0, 0);

    $('.pause').click(function(){
        clearTimeout(thread);
    });

    $('.resume').click(function(){
        f(publicX, publicY);
    });

    function f(x, y) {
        publicX = x;
        publicY = y;            
        thread = setTimeout(function(){
            f(++publicX, ++publicY);
        }, 1000)
    }
});

Working example

请注意,因为publicXpublicY变量现在在所有处理程序的范围内,所以您不再需要将它们包含为f()函数的参数。我已经将它们留在这个例子中,以防你有其他需要使用它们的逻辑。

答案 1 :(得分:0)

var thread;
var x = 0;
var y = 0;
$(document).ready(function(){
    f(x, y)

    $('.pause').click(function(){
        clearTimeout(thread);
    });

    $('.resume').click(function(){
        f(x,y); //want to rerun thread
    });

    f(x, y) {
        thread = setTimeout(function(){
            f(x + 1, y + 1);
        }, 1000)
    }