2009-08-09 17 views
195

Czy możliwe jest jednoczesne uruchomienie dwóch animacji na dwóch różnych elementach? Potrzebuję przeciwieństwa tego pytania Jquery queueing animations.Jak uruchomić dwie animacje jQuery jednocześnie?

muszę zrobić coś takiego ...

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

ale by uruchomić te dwa w tym samym czasie. Jedyne, co mogłem wymyślić, to jednorazowe użycie dla każdej animacji, ale nie sądzę, że jest to najlepsze rozwiązanie.

+0

Mam poważny problem podczas animowania różne właściwości CSS. To pytanie wygląda na stare i umieściłem je w JSFiddle, wydaje się, że oba podejścia działają. Czy to nadal ma znaczenie? http://jsfiddle.net/AVsFe/ – valk

+2

W bieżącym jquery, i wierzę, że od jQuery 1.4, powyższy kod animuje oba jednocześnie, ponieważ kolejki fx są dołączone do elementu, który nazywasz .animate(), a nie globalnym kolejka. –

+0

Erm ... próbowałeś tego? Jeśli użyjesz dokładnego kodu, który tam masz, do mojego zrozumienia jak działa 'animate()', powinny działać jednocześnie. – chaos

Odpowiedz

390

tak jest!

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

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

Dziękuję za to, nie wiedziałem o tej zmiennej 'queue'! – dotty

+2

Czy mogę zapytać, jaki jest cel przekazywania funkcji do jQuery? – pilau

+7

@pilau Zostanie wykonany, gdy dokument będzie gotowy. To jest skrót dla $ (document) .ready (function() {}); i umożliwia umieszczenie kodu javascript przed definicją elementu. –

8

Jeśli uruchomisz powyższe tak, jak jest, będą wyglądały na uruchomione jednocześnie.

Oto niektóre kodu testu:

<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

To by uruchomić jednocześnie tak. co jeśli chciałbyś jednocześnie uruchomić dwie animacje na tym samym elemencie?

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

To kończy się w kolejce animacji. , aby uruchomić je jednocześnie, używałbyś tylko jednej linii.

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

Czy istnieje inny sposób jednoczesnego uruchomienia dwóch różnych animacji na tym samym elemencie?

7

wierzę, znalazłem rozwiązanie w dokumentacji jQuery:

ożywia cały akapit do lewej stylu 50 i krycie 1 (nieprzezroczyste, widoczny), ukończenie animację zasięgu 500 milisekund. Wykona także zrób to poza kolejką, co oznacza, że ​​ automatycznie rozpocznie się bez czekając na swoją kolej.

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

wystarczy dodać: queue: false.

+1

Jak zintegrować pełną funkcję tego? : s – Brainfeeder

2

Zobacz ten świetny wpis na blogu o animowaniu wartości w obiektach. Możesz użyć wartości do animacji, co chcesz, 100% jednocześnie!

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

Używałem go tak, aby przesuwać się w/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

Martwy link, można go znaleźć na https://web.archive.org/web/20150101065437/http://www.josscrowcroft.com/2011/code/jquery-animate-increment-decrement-numeric-text- elementy-wartość # – PhiLho

2

Chociaż prawdą jest, że kolejne rozmowy animować będą sprawiać wrażenie, że są uruchomione w tym samym czasie, podstawową prawdą jest to, że są to odrębne animacje działające bardzo blisko siebie.

ubezpieczyć animacje są rzeczywiście działa w tym samym wykorzystania czasu:

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

Dalsze animacje mogą być dodawane do kolejki „moja animacja” i wszystko może zostać zainicjowany pod warunkiem ostatnią animację rozkolejkowania'S im.

Cheers, Anthony

Powiązane problemy