2013-08-07 36 views
6

我有jQuery的動畫,排隊用於單個元件:jQuery的動畫隊列具有共同緩和

var el = $('.elem'); 

el.animate({ 
     width: 120 
    }, 
    600, 
    'easeInOutQuint' 
).animate({ 
     width: 90 
    }, 
    300, 
    'easeInOutQuint' 
).animate({ 
     width: 100 
    }, 
    100, 
    'easeInOutQuint' 
); 

3個動畫算作1個主動畫,只是鏈的。運行需要1000ms,我想在第一個動畫中使用第一個動畫的60%寬鬆,然後在第二個動畫中使用下一個30%的寬鬆,最後10%的寬鬆結束。

有什麼方法可以將緩動作爲這些排隊動畫的全局值嗎?

+2

我不明白的問題。你是否希望避免每次輸入緩動?你可以將它存儲在一個變量中並使用它。如果這是不正確的,你想完成什麼? – OptimusCrime

+0

請檢查我對@sza答案的評論,這應該清除此問題。 –

回答

7

如果我正確理解你的問題,也許你可以用一個函數的邏輯,所以你可以在時間傳遞和重用鏈式動畫是這樣的:

var el = $('.elem'); 

var ease = function(elem, duration) { 
    elem 
    .animate({width: 120}, 0.6 * duration, 'easeInOutQuint') 
    .animate({width: 90}, 0.3 * duration, 'easeInOutQuint') 
    .animate({width: 100}, 0.1 * duration, 'easeInOutQuint'); 
} 

ease(el, 1000); 
+0

啊,這是有道理的。我根本不理解這個問題。但是好的電話。 +1爲好的解決方案! – OptimusCrime

+0

當然是這樣的! – Seano666

+0

這裏是你在jsfiddle中的代碼:http://jsfiddle.net/sAJDf/動畫的每個樹部分使用相同的緩動,但不是普通的緩動。您的示例使用http://easings.net/#easeInOutQuint(請參閱緩動圖表)對動畫的每個實例執行此動畫。所以每3部動畫進出部分都很慢,這打破了動畫組的動態。這三部動畫需要全球寬鬆。它會像第一個動畫easeInQuint,第二個是線性的,持續時間較短,然後是easeOutQuint。你看到不同嗎? http://jsfiddle.net/jMAjw/ –

2

另一種方法,使之作爲插件。隨着Fiddle

(function ($) { 
    $.fn.ease = function(options) { 
     var settings = $.extend({ 
      // These are the defaults. 
      style: "swing", 
      duration : 1000 
     }, options); 

     return this.each(function(){ 
      $(this) 
      .animate({width: 120}, 0.6 * settings.duration, settings.style) 
      .animate({width: 90}, 0.3 * settings.duration, settings.style) 
      .animate({width: 100}, 0.1 * settings.duration, settings.style); 
     }); 
    }; 
}(jQuery)); 

使用 HTML:<span>This is test line to to work on animate plugin ease</span> JS:$(document).ready(function(){ $('span').ease() });

可以給投入太多的$(element).ease({duration:2000});

+0

請檢查我對@sza答案的評論。 –

1
The simplest way to do this is keep it nested like: 

$("#clickme").click(function() { 
    $("#book").animate({ 
    width: "140px" 

    }, 5000, "", function() { 
     $("#note").animate({ 
      width: "100px"  
      }, 4000, "", function() { 
       $("#note2").animate({ 
        width: "60px" 

        }, 2000, "", function() {  
       }) 
     }) 
    }) 
}); 
+0

這只是我以前用過的一個例子....你也可以試試這個方法 – Anup

+0

請檢查我對@sza的評論回答。 –