1

ここにフィドルがあります--- http://jsfiddle.net/mFrbA/2/

これは、以下のコードの単なるテストです。ゆっくりと着実にスクロールダウンしようとしています。ドキュメントの一番下までスクロールするという単純な方法で実行するだけではない理由は、ユーザーにキャンセルする機会を与えながら段階的に実行したいからです (したがって、scrolling切り替え可能な変数外部関数によって。

変数の理由waitは、(理論的には) while ループがアニメーションよりも速くループするのを防ぐためです。最初からやり直す前に、アニメーションが終了するのを待つかどうかはわかりませんでした。しかし、完全な関数が呼び出されることはなく、そもそもアニメーションが発生することもありません。

ただし、これは実行されていません。何が間違っているのかわかりません。

$(function() {
    scrolling = true;
    while (scrolling) {
        var wait = true; 
        $('html, body').animate(
            { scrollTop: '+=50' }, 
            { duration: 800,
             easing: 'linear',
             complete: function(){
                 alert("hi again");
                 wait = false;}
            }
        );
        while(wait) {
            console.log("waiting");
        }
    }
});
4

1 に答える 1

2

ブラウザーの JavaScript は、(実際には) シングルスレッドであり、イベント ループがあります。while(wait)JavaScript の実行を拘束するため、アニメーション (非同期) が発生する可能性はありません。

これがコールバックがある理由であり、恐ろしいことを除いて、それを回避する方法はほとんどありませんsetInterval

于 2013-09-29T22:35:44.150 に答える