2013-08-07 11 views
6

ho animazioni jQuery che in coda per un singolo elemento:jQuery coda di animazione con allentamento comune

var el = $('.elem'); 

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

I 3 conta animazione come 1 animazione principale, solo incatenato. Ci vogliono 1000ms per correre e vorrei usare nel mio esempio per la prima animazione il primo 60% di easing, poi il prossimo 30% di easing usato nella seconda animazione e finì con l'ultimo 10% di easing.

Esiste un modo per rendere l'andamento come un valore globale per queste animazioni in coda?

+2

Non capisco la domanda. Vuoi evitare di digitare ogni volta l'andamento? Puoi semplicemente memorizzarlo in una variabile e usarlo. Se ciò non è corretto, cosa vuoi realizzare? – OptimusCrime

+0

Si prega di controllare il mio commento sulla risposta @sza, che dovrebbe chiarire questa domanda. –

risposta

7

Se ho capito bene la tua domanda, forse si può avvolgere la logica in una funzione in modo da poter passare nella durata e riutilizzare l'animazione concatenata in questo modo:

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

Ah, questo ha senso. Non ho capito la domanda. Ma buona chiamata. +1 per una bella soluzione! – OptimusCrime

+0

Sì, certo come questo! – Seano666

+0

Ecco il tuo codice in jsfiddle: http://jsfiddle.net/sAJDf/ ogni parte dell'albero dell'animazione usa lo stesso andamento, ma non un allentamento comune. Il tuo esempio usa http://easings.net/#easeInOutQuint (vedi il diagramma di andamento) questa animazione per istanza delle tue animazioni. Quindi ogni 3 parti di animazione in entrata e in uscita è lenta e ciò interrompe le dinamiche del gruppo di animazioni. Ho bisogno di un allentamento globale per queste tre animazioni. Sarebbe qualcosa di simile, la prima facilità di animazioneInQuint, la seconda è una lineare con durata più breve e quindi un easyOutQuint. Vedi il diverso? http://jsfiddle.net/jMAjw/ –

2

Un altro metodo per renderlo il più plugin. Con 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)); 

utilizzo html: <span>This is test line to to work on animate plugin ease</span> js: $(document).ready(function(){ $('span').ease() });

può dare input anche come $(element).ease({duration:2000});

+0

Per favore controlla il mio commento su @sza answer. –

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

Questo è solo un esempio che ho usato prima .... puoi anche provare con questo metodo – Anup

+0

Per favore controlla il mio commento su risposta @sza. –

Problemi correlati