在使用 jQuery 的 animate() 方法時,有時候會出現重復觸發的情況,導致頁面出現異常。本文將探討如何防止此問題。
// 示例代碼 var $element = $('#myDiv'); $element.click(function(){ $element.animate({ left: '100px' }, 1000); });
上述代碼中,當點擊元素時,元素會向左移動 100 像素,動畫時間為 1 秒。如果快速點擊多次,就會導致動畫重復觸發,元素向左移動的距離也會變得不可預測。
要解決這個問題,可以使用門閂鎖(Latch Lock)模式。門閂鎖是一種常見的多線程編程模式,在本場景中,可以用來確保動畫完成后才能再次觸發。
// 修復后的代碼 var $element = $('#myDiv'); var latch = false; // 初始狀態為關閉 $element.click(function(){ if(!latch){ latch = true; // 狀態為打開 $element.animate({ left: '100px' }, 1000, function(){ // 動畫完成后將狀態關閉 latch = false; }); } });
在示例代碼中,我們加入了一個狀態變量 latch,用來記錄動畫是否正在進行。當 latch 處于關閉狀態時,才能繼續觸發動畫;當動畫完成后,將狀態關閉,從而允許再次觸發。
通過引入門閂鎖模式,我們成功解決了 animate() 多次觸發的問題,避免了頁面異常。