0

前が完了するまで実行しないでください。すばやくクリックすると、スクリプトが正しくありません。数回クリックすると、完了を待たずに関数が実行されます。散らかってしまいます。

$(".vid1 .next, .vid2 .next").click(function(){
        $(".type2").find(".crop").find(".left").find("div:last").clone().insertAfter($(".type1").find(".crop").find(".left").find("div:last"));
        $(".type2 .crop .left div:first").animate({marginLeft: '0px'}, 0);
        $(".type1").find(".crop").find(".left").find("div:first").clone().insertBefore($(".type2").find(".crop").find(".left").find("div:first"));
        $(".type2").find(".crop").find(".left").find("div:first").animate({marginLeft: '0px'}, 0);
        $(".type1").find(".crop").find(".left").find("div:first").animate(
            {marginLeft: '0px'}, {
            duration: 500,
            complete: function() { 
            $(".type1").find(".crop").find(".left").find("div:first").remove();
            $(".type1").find(".crop").find(".left").find("div:first").animate({marginLeft: '208px'}, 0);
            }
            }); 
        $(".type2").find(".crop").find(".left").find("div:first").animate(
            {marginLeft: '208px'}, {
            duration: 500,
            complete: function() { 
            $(".type2").find(".crop").find(".left").find("div:last").remove();
            }
            }); 
    });
4

2 に答える 2

1

クリックを開始するときに変数をTrueに初期化でき、CompleteでFalseに戻します。

彼がクリックするたびに、Trueかどうかを確認してから、関数を終了します。

var isClicking=false;

$(".vid1 .next, .vid2 .next").click(function(){

  if(isClicking)
   return;
   isClicking=true;
        $(".type2").find(".crop").find(".left").find("div:last").clone().insertAfter($(".type1").find(".crop").find(".left").find("div:last"));
        $(".type2 .crop .left div:first").animate({marginLeft: '0px'}, 0);
        $(".type1").find(".crop").find(".left").find("div:first").clone().insertBefore($(".type2").find(".crop").find(".left").find("div:first"));
        $(".type2").find(".crop").find(".left").find("div:first").animate({marginLeft: '0px'}, 0);
        $(".type1").find(".crop").find(".left").find("div:first").animate(
            {marginLeft: '0px'}, {
            duration: 500,
            complete: function() { 
            $(".type1").find(".crop").find(".left").find("div:first").remove();
            $(".type1").find(".crop").find(".left").find("div:first").animate({marginLeft: '208px'}, 0);
            }
            }); 
        $(".type2").find(".crop").find(".left").find("div:first").animate(
            {marginLeft: '208px'}, {
            duration: 500,
            complete: function() { 
            $(".type2").find(".crop").find(".left").find("div:last").remove();
            isClicking=false;
            }
            }); 
    });
于 2013-03-20T13:52:28.980 に答える
0

最初にボタンを無効にし、終了後にボタンを有効にしてみてください。

$(".vid1 .next, .vid2 .next").click(function(){
 $(this).attr("disabled", true);   
 $(".type2").find(".crop").find(".left").find("div:last").clone().insertAfter($(".type1").find(".crop").find(".left").find("div:last"));
        $(".type2 .crop .left div:first").animate({marginLeft: '0px'}, 0);
        $(".type1").find(".crop").find(".left").find("div:first").clone().insertBefore($(".type2").find(".crop").find(".left").find("div:first"));
        $(".type2").find(".crop").find(".left").find("div:first").animate({marginLeft: '0px'}, 0);
        $(".type1").find(".crop").find(".left").find("div:first").animate(
            {marginLeft: '0px'}, {
            duration: 500,
            complete: function() { 
            $(".type1").find(".crop").find(".left").find("div:first").remove();
            $(".type1").find(".crop").find(".left").find("div:first").animate({marginLeft: '208px'}, 0);
            }
            }); 
        $(".type2").find(".crop").find(".left").find("div:first").animate(
            {marginLeft: '208px'}, {
            duration: 500,
            complete: function() { 
            $(".type2").find(".crop").find(".left").find("div:last").remove();
            }
            }); 
  $(this).removeAttr("disabled");
    });
于 2013-03-20T13:49:57.020 に答える