1

私が達成する必要があるのは、送信ボタンをクリックすると、特定のdivが表示されるはずです。これが私のコードです:http: //jsfiddle.net/7tn5d/ しかし、送信ボタンを複数回クリックすると、関数は一種のキューを呼び出して次々に実行します。現在のアニメーションが実行されているときに他のonclicksを無効にする方法はありますか?コード:

 animating = 0;
    doneanim = 0;
    $(function () {
        $("#submit_tab").click(function (e) {
            if (animating == 1) return;
            animating = 1;
            $("#submit_cont").show("blind", {}, 1000);
            animating = 0;
        });
    });
4

6 に答える 6

2

アクションが複数回実行されないようにするには、前のアニメーションを停止します。それで:

$('#submit_cont').stop().show("blind",{},1000);

ただし、アニメーションがすでに実行されている場合は、アニメーションの実行を阻止しようとしていることに気付きました。divを表示するのに1秒または1000ミリ秒かかりますが、アニメーションが完了するまで条件の実行は一時停止しません。次のように、アニメーションの完了後に実行する関数を定義する必要があります。

animating = 0;
doneanim = 0;
$(function () {
    $("#submit_tab").click(function (e) {
        if (animating == 1) return;
        animating = 1;
        $("#submit_cont").show("blind", 1000, function() { animation = 0; });
    });
});

お役に立てば幸いです...

于 2013-03-06T14:28:39.513 に答える
1

:animatedセレクターを使用して、以下を確認できます。

$(function () {
    $("#submit_tab").click(function (e) {
        var $cont = $("#submit_cont");
        if (!$cont.is(':animated')) {
           $cont.show("blind", {}, 1000);
        }
    });
});

.data()ここで、外部セマフォのアイデアに固執する場合は、グローバル変数を使用する代わりに、それを要素に固執する方がよいでしょう。

$(function () {
    $("#submit_tab").click(function (e) {
        var $cont = $('#submit_cont'),
            animating = $cont.data('isAnimating');
        if (animating) {
           return;
        } else {
          $cont.data('isAnimating', 1);
          $("#submit_cont").show("blind", 1000, function() { $cont.data('isAnimating', 0); });
        }
    });
});
于 2013-03-06T14:30:31.107 に答える
1

セマフォでほぼ正解です!jQueryshow()では、セマフォを引数としてリセットする必要があります。これが修正バージョンです-http://jsfiddle.net/snikrs/xe5A3/

animating = 0;
doneanim = 0;
$(function () {
    $("#submit_tab").click(function (e) {
        if (animating == 1) return;
        animating = 1;
        $("#submit_cont").show("blind", 1000, function() {
            animating = 0;
        });
    });
});
于 2013-03-06T14:29:38.477 に答える
0

このようなもの(ドキュメントを参照):)

$("#submit_cont").show("blind", function(){
    animating = 0;
});
于 2013-03-06T14:27:06.833 に答える
0

$("#submit_cont").clearQueue();アニメーションが終了した後に追加できます:

 $("#submit_tab").click(function (e) {
     $("#submit_cont").show("blind", 1000, function() {
         $("#submit_cont").clearQueue();
     });
 });

更新されたJSFiddle

于 2013-03-06T14:32:43.490 に答える
0

私はこれに対する別の解決策を見つけました、それは私の意見ではよりきれいに見えます:

var tab = $("submit_tag");
tab.on("click", function(){
    var cont = $("submit_cont");
    var animating = tab.queue("fx").length;
    if(animating === 0){
        cont.show("blind", {}, 1000);
    }
});
于 2014-01-22T20:57:35.343 に答える