1

出于某种原因,我的 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>​
4

2 回答 2

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);
});​

这是更新的小提琴。

于 2012-04-06T17:16:36.063 回答
1

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

   setTimeout(galleryScroll, 100);

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

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

于 2012-04-06T17:20:30.283 回答