2010-12-14 180 views
0
$("#right").live("click", function(event) { 
    $(".image_scroll").animate({"left": "+=300px"}, "slow"); 
}); 

我需要點擊才能基本上不註冊,直到動畫完成。 我試過使用return false,但似乎完全殺死鏈接。jQuery:防止點擊隊列

也嘗試使用$(".image_scroll").stop().animate({"left": "+=300px"}, "slow");但這只是使動畫口吃和看起來不好。

編輯:ID #right在圖像上,而不是a標記。該HTML如下:

<img src="/images/right.png" id="right" alt="" /> 
<div id="container"> 
    <div id="image_scroll"> 
     <img src="1.jpg" /> 
     <img src="3.jpg" /> 
     <img src="4.jpg" /> 
    </div><!-- /#image_scroll --> 
</div> <!-- /#container 

回答

1

您需要提供一個回調動畫...

$("#right").live("click", function(event) { 
    event.preventDefault(); 
    var src = $(this).attr('href'); 
    $(".image_scroll").animate({"left": "+=300px"}, "slow", function() { window.location.href = src; }); 
}); 
+0

如果不使用'a'鏈接怎麼辦? id #right在圖像上 – kylex 2010-12-14 20:56:00

+0

圖像上的點擊是做什麼的?如果您在#right上再次提升點擊事件,您如何判斷初始點擊(您剛剛阻止,以便您可以進行動畫製作)和點擊動畫後觸發的點擊之間的區別。你可以使用全局標誌以非常冒險的方式做到這一點,但爲什麼不只是執行預期的行爲呢? – 2010-12-15 05:11:01

0
var handler = function(event) { 
    $("#right").die("click"); 
    $(".image_scroll").animate({"left": "+=300px"}, "slow", function(){ 
     $("#right").live("click", handler); 
    }); 
}; 
$("#right").live("click", handler); 
1

你需要存儲的動畫是否正在運行與否,你可以使用jQuery.data功能爲:

$("#right").live("click", function(event) { 
    var el = $(this), 
     state = el.data('animation_state'); 
    if(state == 'busy') { 
     //ignore clicks while the animation is running 
     return false; 
    } 
    el.data('animation_state', 'busy'); 
    $(".image_scroll").animate({"left": "+=300px"}, "slow", function() { 
     //finished animating  
     //set the state to finished so we can click the element the next time 
     el.data('animation_state', 'complete'); 
    }); 
}); 
0

檢查動畫正在運行,如果是這樣,

$("#right").live("click", function(event) { 

    if ($(".image_scroll").is(":animated")) { 
     return false; 
    } 

    $(".image_scroll").animate({"left": "+=300px"}, "slow"); 
});