2009-08-09 22 views
195

È possibile eseguire due animazioni su due elementi diversi contemporaneamente? Ho bisogno del contrario di questa domanda Jquery queueing animations.Come eseguire due animazioni jQuery contemporaneamente?

ho bisogno di fare qualcosa di simile ...

$('#first').animate({ width: 200 }, 200); 
$('#second').animate({ width: 600 }, 200); 

ma per eseguire quei due allo stesso tempo. L'unica cosa che potrei pensare sarebbe usare setTimeout una volta per ogni animazione, ma non penso che sia la soluzione migliore.

+0

ho un problema reale quando animare diverse proprietà CSS. Questa domanda sembra vecchia e la inserisco nel JSFiddle, sembra che entrambi gli approcci funzionino. È ancora rilevante? http://jsfiddle.net/AVsFe/ – valk

+2

Nel jquery corrente, e credo che dal momento in cui jQuery 1.4, il codice precedente si anima contemporaneamente, poiché le code fx sono collegate all'elemento che si chiama .animate(), non un global coda. –

+0

Ehm ... ci hai provato? Se usi il codice esatto che hai lì, per capire come funziona 'animate()', dovrebbero funzionare simultaneamente. – chaos

risposta

390

sì, c'è!

$(function() { 
    $("#first").animate({ 
     width: '200px' 
    }, { duration: 200, queue: false }); 

    $("#second").animate({ 
     width: '600px' 
    }, { duration: 200, queue: false }); 
}); 
+11

Grazie per questo, non sapevo che la variabile 'queue'! – dotty

+2

Posso chiedere qual è lo scopo del passaggio di una funzione a jQuery? – pilau

+7

@pilau Verrà eseguito quando il documento è pronto. Questa è una scorciatoia per $ (document) .ready (function() {}); e ti consente di inserire il tuo codice javascript prima della definizione dell'elemento. –

8

Se si esegue quanto sopra così come sono, sembreranno eseguire simultaneamente.

Ecco alcuni codice di prova:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script> 
$(function() { 
    $('#first').animate({ width: 200 }, 200); 
    $('#second').animate({ width: 600 }, 200); 
}); 
</script> 
<div id="first" style="border:1px solid black; height:50px; width:50px"></div> 
<div id="second" style="border:1px solid black; height:50px; width:50px"></div> 
16

che avrebbe eseguito contemporaneamente sì. e se volessi eseguire contemporaneamente due animazioni sullo stesso elemento?

$(function() { 
    $('#first').animate({ width: '200px' }, 200); 
    $('#first').animate({ marginTop: '50px' }, 200); 
}); 

Questo finisce per mettere in coda le animazioni. per eseguirli simultaneamente si utilizzerà solo una riga.

$(function() { 
    $('#first').animate({ width: '200px', marginTop:'50px' }, 200); 
}); 

C'è un altro modo per eseguire contemporaneamente due diverse animazioni sullo stesso elemento?

7

Credo che ho trovato la soluzione nella documentazione jQuery:

anima tutti comma ad uno stile sinistra di 50 e l'opacità di 1 (opaco, visibile), completando l'animazione all'interno 500 millisecondi. Lo farà anche fuori dalla coda, ovvero si avvierà automaticamente senza in attesa del suo turno.

$("p").animate({ 
    left: "50px", opacity: 1 
}, { duration: 500, queue: false }); 

semplicemente aggiungere: queue: false.

+1

Come integrare la funzione completa su questo? : s – Brainfeeder

2

Vedere questo brillante post sul blog sull'animazione dei valori negli oggetti .. è quindi possibile utilizzare i valori per animare tutto ciò che si desidera, al 100% contemporaneamente!

http://www.josscrowcroft.com/2011/code/jquery-animate-increment-decrement-numeric-text-elements-value/

ho usato come questo per far scorrere in/out:

 slide : function(id, prop, from, to) { 
      if (from < to) { 
       // Sliding out 
       var fromvals = { add: from, subtract: 0 }; 
       var tovals = { add: to, subtract: 0 }; 
      } else { 
       // Sliding back in 
       var fromvals = { add: from, subtract: to }; 
       var tovals = { add: from, subtract: from }; 
      } 

      $(fromvals).animate(tovals, { 
       duration: 200, 
       easing: 'swing', // can be anything 
       step: function() { // called on every step 
        // Slide using the entire -ms-grid-columns setting 
        $(id).css(prop, (this.add - this.subtract) + 'px 1.5fr 0.3fr 8fr 3fr 5fr 0.5fr'); 
       } 
      }); 
     } 
+1

Dead link, trovato di nuovo su https://web.archive.org/web/20150101065437/http://www.josscrowcroft.com/2011/code/jquery-animate-increment-decrement-numeric-text- elementi valore # – PhiLho

2

Mentre è vero che le chiamate successive per animare darà l'apparenza sono in esecuzione allo stesso tempo, il la verità di fondo è che sono animazioni distinte che corrono molto vicino al parallelo.

per assicurare le animazioni sono infatti in esecuzione allo stesso tempo utilizzare:

$(function() { 
    $('#first').animate({..., queue: 'my-animation'}); 
    $('#second').animate({..., queue: 'my-animation'}).dequeue('my-animation'); 
}); 

ulteriori animazioni possono essere aggiunti alla coda 'my-animation' e tutti possono essere avviate fornito l'ultima animazione dequeue Sono loro.

Cheers, Anthony

Problemi correlati