スクリプトを見ると、競合状態に陥っているように見えます。思ったよりも速くクラスを削除および追加しているため、1 つだけを選択するつもりだったときに複数のアイテムを選択している状態が作成されます。
例えば:
slidecontent = $('.slidecontent');
slideimg.prepend(slidecontent.children('img').addClass('slidecontent'));
slidecontent.removeClass('slidecontent').addClass('slideleft thisclassc');
previmg
関数には上記の行があります。この関数をトリガーするボタンをクリックするのが早すぎるとslidecontent
、リスト内の次の要素に同じクラスを割り当てたため、オブジェクト内に複数の項目が存在することになります。関数が完了するまで何らかの方法でロックアウトするか、より具体的なセレクターを作成する必要があります。
これを行う最も簡単な方法は、ロックフラグを作成することですが、最もエレガントではありません。次に、関数が実行される前にロック フラグをテストして、競合状態を回避し、すぐに戻って余分なクリックを無視するようにインスタント タイムアウトを設定します。
var animActive = false;
$.fn.previmg = function(){
$(this).click(function(){
if(totalrightimg != 0 && animActive==false){
animactive = true;
setTimeout(function(){
//everything else
animactive = false;
},0);
}
else if(totalrightimg == 0 && animActive==false){
animactive = true;
setTimeout(function(){
//everything else
animactive = false;
},0);
}
}
});
この変数を追加してからこのチェックを行うと、操作を重ねて実行することがなくなるため、競合状態を確実に回避できます。操作が実行されるたびに、完了するまで再度実行する機能がロックアウトされます。したがって、その後のクリックは無視されます。
この動作が望ましくない場合は、' slidecontent
' クラスのセレクターを絞り込んで、1 つの要素のみを選択していることを確認する方法を検討する必要があります。
編集:クリックイベントの同期処理を完全に無視しました。私の悪い。上記のコードは、ロックとロック解除を別々のスコープに強制するため、変更コードを安全に実行できます。