简单嵌套的setTimeout()只运行一次(JavaScript)

时间:2012-04-06 17:09:27

标签: javascript nested settimeout

由于某种原因,我的galleryScroll()函数只运行一次,即使该函数使用setTimeout()调用自身。我认为这个问题可能与范围有关,但我不确定:

http://jsfiddle.net/CYEBC/2/

$(document).ready(function() {
    var x = $('#box').offset().left;
    var y = $('#box').offset().top;
    galleryScroll();

    function galleryScroll() {
        x = x + 1;
        y = y + 1;
        $('#box').offset({
            left: x,
            top: y
        });
        setTimeout('galleryScroll()', 100);
    }
});​

HTML:

<html>
<head>
</head>
<body>
    <div id="box">
    </div>
</body>
</html>​

2 个答案:

答案 0 :(得分:2)

函数galleryScroll()未在setTimeout()中评估的正确范围中定义。如果您希望它在循环中运行,请在函数后面的setInterval()中调用它。

$(document).ready(function() {
    var x = $('#box').offset().left;
    var y = $('#box').offset().top;
    galleryScroll();

    function galleryScroll() {
        x = x + 1;
        y = y + 1;
        $('#box').offset({
            left: x,
            top: y
        });
    }
    // Call in setInterval() outside the function definition.
    // Note also, I've changed the eval string 'gallerySroll()' to the function reference galleryScroll
    setInterval(galleryScroll, 100);
});​

Here is the updated fiddle.

答案 1 :(得分:1)

您的问题是如何在setTimeout中调用galleryScroll()函数。将该行更改为:

   setTimeout(galleryScroll, 100);

结果:http://jsfiddle.net/CYEBC/12/

注意:我不确定这是否是所需的行为,但是当您的代码被正确调用时会发生这种情况。