0

誰かが一般的なアニメーション キューを管理しようとしましたか?

バックエンドプログラミングでプロデューサー/コンシューマーのようなものを取得したいので、アニメーションをトリガーするイベントは、必要なアニメーションの一部を一般的なキューに追加できます。これは、チェーンのように常に処理されています。

何が悪いのかわかりません。実行をログに記録すると、正しい順序で進んでいますが、いくつかのアニメーションをすばやくトリガーすると、JS によって一連のアニメーション タスクが完全に混同されます。

jsFiddleでいくつかの例をコンパイルしました。「左」位置でアニメーション化されている、絶対配置された「.anim」ブロックの単純な構造があります。

<div id="anims_wrap">
    <div class="anim even" id="anim0">0</div>
    <div class="anim odd" id="anim1">1</div>
    <div class="anim even" id="anim2">2</div>
    <div class="anim odd" id="anim3">3</div>
    <div class="anim even" id="anim4">4</div>
    <div class="anim odd" id="anim5">5</div>
    <div class="anim even" id="anim6">6</div>
    <div class="anim odd" id="anim7">7</div>
    <div class="anim even" id="anim8">8</div>
    <div class="anim odd" id="anim9">9</div>
</div>

そして、次の基本的な方法は、最後のアニメーション化されたブロックを終了し、いくつかの 3 つのブロックに対して新しいアニメーション作品を実行する関数をキューに追加することです。チェーンは、各アニメーションが完了したときにのみ呼び出されます。独自のアニメーション キューが false に設定されています。

function queueAnimation(animId) {//animId is between 1 & 5, sent by the button triggering the animation..

    var animWrap = $("#anims_wrap");
    var animId1 = animId - 1;
    var animId2 = animId + 2;
    var animId3 = animId === 5 ? 0 : animId + 5;


    animWrap.queue("anims_queue", function (next) {
        exitPositionedAnimation(function () {

            $("#anim" + animId1).addClass("positioned").animate({
                left: 50
            }, {
                duration: 4000,
                queue: false
            });
            $("#anim" + animId2).addClass("positioned").animate({
                left: 150
            }, {
                duration: 6000,
                queue: false,
                complete: next
            });
            $("#anim" + animId3).addClass("positioned").animate({
                left: 200
            }, {
                duration: 5000,
                queue: false
            });

            console.log(animId1 + "," + animId2 + "," + animId3)
        });
    });

    //the only way I found to check if animation is in process..
    if (!$._data(animWrap[0], "anims_queue.run")) {
        animWrap.dequeue("anims_queue");
    }
}

原則の実装を維持できる限り、コードを単純化しました。いくつかのアニメーション ボタンをすばやく 押してみると、混乱が見られます。

たぶん、私は JavaScript に期待しすぎているのかもしれません :)

4

1 に答える 1