0

私は次のように機能を設定しています:

function sixth_screen_intro() {
    current_slide = 7;
    fifth_screen_outro();

    $("#voting-txt").animate({
        top: "50%",
        marginTop:-80
    },500);
}

参考までに、ここに five_screen_outro() を示しますが、メモとして、それらを分けておきたいと思います。

function fifth_screen_outro() {
    $("#budget-txt").animate({
        left:600
    },500);
    coin_hop();
    $("#piggy_bank").animate({
        marginTop:-190,
        left:50
    },70, function() {
        $("#piggy_bank").animate({
            marginTop:-141,
            left:0
        },70, function () {
            coin_hop_delay();
            $("#piggy_bank").delay(400).animate({
                marginTop:-190,
                left:-50
            },70, function () {
                $("#piggy_bank").animate({
                    marginTop:-141,
                    left:-100
                },70, function () {
                    coin_hop_delay();
                    $("#piggy_bank").delay(400).animate({
                        marginTop:-190,
                        left:-150
                    },70, function () {
                        $("#piggy_bank").animate({
                            marginTop:-141,
                            left:-200
                        },70, function () {
                            coin_hop_delay();
                            $("#piggy_bank").delay(400).animate({
                                marginTop:-190,
                                left:-250
                            },70, function () {
                                $("#piggy_bank").animate({
                                    marginTop:-141,
                                    left:-300
                                },70, function () {
                                    coin_hop_delay();
                                    $("#piggy_bank").delay(400).animate({
                                        marginTop:-190,
                                        left:-350
                                    },70, function () {
                                        $("#piggy_bank").animate({
                                            marginTop:-141,
                                            left:-400
                                        },70);
                                    });
                                });
                            });
                        });
                    });
                });
            });
        });
    });
}

six_screen_intro() はクリックするだけで呼び出されます。third_screen_outro() の実行が完了するまで、voting-txt アニメーションを再生しないようにする方法はありますか? おそらくある種のコールバック?

4

3 に答える 3

0

ネストされたものをすべて取り除き、代わりに呼び出すことができる関数を使用します:

function fifth_screen_outro(callback) {
    var i = 0, l = 0;

    $("#budget-txt").animate({
        left:600
    },500);
    coin_hop();
    ani(-141, 10);

    function ani(val, times) {
        var s = val == -190;
        if (s) coin_hop_delay();
        $("#piggy_bank").delay(s ? 400 : 0).animate({
            marginTop: val,
            left: l
        },70, function() {
            if (i >= times) {
                callback();
            }else{
                l += 50;
                i++;
                ani(s ? -141 : -190, times);
            }
        });
    }
}

フィドル

于 2013-08-08T18:36:52.410 に答える
0

$("#voting-txt").animate がしばらくして呼び出されるようにタイムアウト関数を使用するか、jquery の完了時にこれを使用することができます。

タイムアウトは簡単で、問題を解決します

setTimeout(function() {
        $("#voting-txt").animate(){}
    }, 1000);

first() 関数が何かを非同期的に実行している場合 (Ajax リクエストの作成など)、first() が戻った直後に実行するのではなく、second() をその非同期リクエストのコールバックにする必要があります。

于 2013-08-08T18:37:26.053 に答える