從看你的腳本,它會出現在你正在運行到一個競爭狀態。您正在以比您想象的更快的速度移除和添加類,從而創建一個條件,當您打算選擇一個時,您將選擇多個項目。
例如:
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
」類的選擇。
編輯:完全忽略了點擊事件的同步處理。我的錯。上面的代碼將強制鎖定和解鎖到單獨的作用域,因此您應該安全地執行更改代碼。
我一直在想這個解決方案,但我不知道該怎麼做。事實證明它非常簡單:P 非常感謝!和新年快樂! :D – Snoo
有時候是最難以想到的事情,是最容易實現的事情。我很高興它會爲你工作。新年快樂。 –
我試圖使用這個技巧,但它仍然無法正常工作,因爲它使得animactive = false,點擊後。 即時嘗試添加延遲,但它不工作: $ .delay(2200,function(){animactive = false}); 有什麼想法? – Snoo