2012-01-09 90 views
2

使用jQuery 1.7.2如何停止()的動畫,但允許當前完成

$(function(){ 
    $('#parentElem').mouseenter(function(){ 
     $('.myElem').animate({opacity:1}, 'fast'); 
    }).mouseleave(function(){ 
     $('.myElem').stop().animate{opacity:0}, 'slow'); 
    }); 
}); 

在這個例子中,我有淡入上mouseenter事件後暫停,並再次淡出元素(在mouseout)給予悸動效果。

但是我有一個問題 - 使用.stop()方法,當前正在運行的動畫將被中斷並再次退出 - 我的'throb'效果不起作用。當然,這正是.stop() - 但是我真正想要做的就是清除隊列並讓當前動畫完成,同時向隊列中添加淡出動畫。

任何想法?

P.S我也嘗試了.clearQueue()方法,但這表現出類似的行爲。

編輯: 我真的應該提到的東西 - 我需要在遊標結束時保持淡入的元素 - 所以使用animate函數的回調不會解決它。我更新了代碼以使其更加明顯。對不起,有任何困惑。

回答

5

可以使用complete callback of the animate method執行淡出:

類似的方法可以用來設置標誌

$('.myElem').animate({opacity:1}, 'fast', function() {$(this).stop().animate{opacity:0}, 'slow');}); 

更新,以確保生命的停止,然後淡出上後面的鼠標/淡入完成:

(function() { 
    var doFadeOut = false; 
    var fadeOut = function() { 
    if (doFadeOut) { 
     $('.myElem').stop().animate({ opacity: 0 }, 'slow'); 
     doFadeOut = false; 
    } else { 
     doFadeOut = true; 
    } 
    }; 
    $('#parentElem').mouseenter(function() { 
    $('.myElem').animate({ opacity: 1 }, 'fast', fadeOut); 
    }).mouseleave(fadeOut); 
}()) 
+0

很好的答案,謝謝。我現在正在額頭上拍掌,因爲我沒有正確解釋問題 - 對不起。請參閱更新後的問題 – jammypeach 2012-01-09 11:57:23

+0

@jammypeach沒問題,答案已更新。 – 2012-01-09 12:04:08

+0

很優雅,謝謝。這對我來說很有效 - 你在stopAnimation的if測試中在動畫中缺少一個開放的括號:) – jammypeach 2012-01-09 12:07:06

相關問題