1

関数が setTimeout() を使用して自分自身を呼び出しているにもかかわらず、何らかの理由で私の galleryScroll() 関数は 1 回しか実行されません。この問題はスコープに関連している可能性があると考えていますが、よくわかりません:

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 に答える