2013-07-26 83 views
1

我有一個關於.animate函數回調的問題。我試圖讓一個元素在光標離開父元素時淡出。在淡出之後,該元素應該隱藏起來,所以你不能用鼠標懸停在它上面或點擊它。但是,隱藏元素的回調函數在動畫開始時調用,而不是在結束時調用。我嘗試了很多東西,但都沒有成功。如果需要的話,我可以發佈我的所有代碼(並不多,只是一個帶有一些我自己製作的鏈接的小主頁)。jQuery。動畫開始動畫回調觸發

var fadeIn = {opacity: "1"}; 
var fadeOut = {opacity: "0"}; 

$(".link-main").hover(function(){ 
    $(this).children(".link-sub").css("z-index", "10").show().animate(fadeIn, 100); 
}, function(){ 
    // The animation. 
    $(this).children(".link-sub").animate(fadeOut, 100, "swing", function(){ 
     $(this).hide(); 
    }); 
}); 

此外,僅僅使用.fadeIn和.fadeOut不會因爲任何原因而工作。元素會立即消失。

在此先感謝!

編輯:這就是我現在所擁有的jsfiddle.net/rqfcZ

+0

你有沒有把[$ .fx.off](http://api.jquery.com/jQuery.fx.off/)設置爲'true'? –

+0

重複的問題請參閱下面的stackoverflow問題。 http://stackoverflow.com/questions/5397260/animates-callback-function-complete-executed-at-start – Akki619

+0

我已經設法通過鏈接在一起的動畫做類似的事情,所以每個動畫運行在以前的回調。你應該能夠在animate()而不是hover()上使用回調嗎? –

回答

2

.fadeIn.fadeOut是否.show().hide()自己。 嘗試刪除它們而不使用動畫。

只是$(element).fadeOut()

另外對於事件,您正在使用舊的jQuery語法。看看該文檔爲.on()

+0

沒有必要使用on(),除非一個人期望在動態創建的元素上進行操作。 on()方法取代live(),但不是所有的事件處理程序。 – isherwood

+0

@isherwood你說得對。但是因爲'.hover'是'.on('mouseenter mouseleave')'的縮寫[如文檔中所述],我認爲只爲初學者學習'.on'會更好。他們棄用了其他特定功能,如'.click()' –

+0

@Paolo,你在哪裏看到'click()'被棄用? –

0

@Frederic哈米迪我的壞....道歉

請訪問此鏈接

http://fisherwebdev.com/wordpress/2009/06/08/scope-issues-with-the-callback-to-jquerys-animate-function/

分辨率上面鏈接就讓我們來看看,來到您需要爲此添加ref變量的結論。

+2

我只對JS/jQuery有基本的理解,所以我不太瞭解這篇文章。你能否告訴我我的代碼中必須改變的是什麼? –

+0

我已經編輯你在這裏http://jsfiddle.net/Akash619/ZdrZW/小提琴,請看看我所添加的是ref變量$(this)像var a = $(this);請按照需要隨時獲得正確的功能... – Akki619