2011-03-24 27 views
1

希望這是一個簡單的請求。我發現這個代碼完全適合我想做的事(在淡入淡出時旋轉列表項)http://jsfiddle.net/gaby/S5Cjm/1/。但是,我正在尋找將鼠標懸停在動畫上並在鼠標上恢復的動畫。目前,我是一個新手,用Javascript和JQuery,所以任何幫助,將不勝感激。需要幫助暫停/恢復淡入和淡出

謝謝。

編輯:側面問題:使用JQuery來做這件事有沒有好處?一個獨立的腳本會更合適嗎?

回答

1

我將懸停事件附加到您的列表項。 over函數使用jQuery.stop(true)停止動畫和所有後續動畫。該輸出功能恢復動畫:

http://jsfiddle.net/US4Fc/1/

var duration = 1000 
function InOut(elem) { 
    elem.delay(duration).fadeIn(duration).delay(duration).fadeOut(

    function() { 
     if (elem.next().length > 0) { 
      InOut(elem.next()); 
     } 
     else { 
      InOut(elem.siblings(':first')); 
     } 

    }); 
} 

$(function() { 
    $('#content li').hide().hover(
     function() { 
      $(this).stop(true) 
     }, 
     function() { 
      var curOp = Number($(this).css("opacity")); 
      $(this).fadeTo(duration*(1-curOp), 1, function() { 
       InOut($(this)) 
      }); 

     } 
    ); 
    InOut($('#content li:first')); 

}); 
+0

這非常接近。但是,如果我更改動畫值(允許爲淡入淡出和延遲表示1000),並且在動畫期間將鼠標懸停/放出,似乎會將該特定列表項的不透明度重置爲懸停時的不透明度。因此,如果我將鼠標懸停在外,因爲列表項目剛剛開始淡入,它將變得基本不可見。有任何想法嗎?謝謝。 – IMI 2011-03-24 17:38:15

+0

只是有一個想法。是否有一種簡單的方法可以在懸停時將不透明度設置爲100%?這能解決問題嗎? – IMI 2011-03-24 17:56:21

+0

我更新了代碼,所以現在它會在您懸停時檢查當前的不透明度。然後確定動畫應該持續多長時間並在該時間內完成動畫。只需首先設置持續時間變量。例如,如果動畫完成了50%,那麼不透明度將爲0.5。對於1000ms的持續時間,代碼將在500ms內將動畫從0.5增加到1,然後繼續循環。 – Adam 2011-03-24 17:58:19

0

Will this work for you

$(function(){ 
    var active; 
    $('#content li').hide().hover(
     function(){ 
      active = $(this).stop(); 
     }, 
     function(){ 
      active && InOut(active); 
     } 
    ); 
    InOut($('#content li:first')); 

}); 
+0

這似乎就會失控,如果列表項懸停在動畫漸變之前完成。 – IMI 2011-03-24 17:40:51