İki jQuery animasyonu aynı anda nasıl çalıştırılır?


211

İki animasyonu aynı anda iki farklı öğe üzerinde çalıştırmak mümkün müdür? Bu sorunun tersine ihtiyacım var Jquery kuyruk animasyonlar .

Böyle bir şey yapmam gerek ...

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

ama bu ikisini aynı anda çalıştırmak. Aklıma gelen tek şey setTimeouther animasyon için bir kez kullanmak olurdu , ama bunun en iyi çözüm olduğunu düşünmüyorum.


Eee ... denedin mi? Orada sahip olduğunuz kodu tam olarak kullanırsanız, nasıl animate()çalıştığını anladığım için, aynı anda çalışmalıdırlar.
kaos

İşte başlıyoruz - jsbin.com/axata . Kodu görmek için ekleyin / düzenleyin
Russ Cam

Farklı CSS özelliklerini canlandırırken gerçek bir sorunum var. Bu soru eski görünüyor ve JSFiddle'a koydum, her iki yaklaşım da işe yarıyor gibi görünüyor. Bu hala alakalı mı? jsfiddle.net/AVsFe
valk

3
Geçerli jquery, ve ben inanıyorum jQuery 1.4 beri, yukarıdaki kod her ikisi de aynı anda canlandırır, çünkü fx kuyrukları .animate () çağırdığınız öğeye genel bir sıraya bağlı değil.
Chris Moschini

Yukarıda jsbin öldü. Aynı jsfiddle, işe yarıyor: jsfiddle.net/b9chris/a8pwbhx1
Chris

Yanıtlar:


418

Evet var!

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

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

15
Bunun için teşekkürler, bu queuedeğişkeni bilmiyordum !
dotty

4
Bir işlevi jQuery'ye geçirmenin amacının ne olduğunu sorabilir miyim?
pilau

13
@pilau Belge hazır olduğunda yürütülür. Bu $ (document) .ready (function () {}) için bir kısayol. ve javascript kodunuzu öğe tanımınızdan önce koymanızı sağlar.
Raphael Michel

1
evet, sırayı doğru / yanlış olarak ayarlayabilir veya bu şekilde bir dize (sıra adı) verebilirsiniz, her iki animasyon da aynı zamanlayıcıyı kullanır ...
AlexK

3
Buna bir onComplete nasıl eklersiniz?
jmchauv

19

Bu eşzamanlı olarak çalışır evet. aynı öğede aynı anda iki animasyon çalıştırmak isterseniz ne olur?

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

Bu animasyonları kuyruğa sokar. aynı anda çalıştırmak için sadece bir satır kullanırsınız.

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

Aynı öğede aynı anda iki farklı animasyon çalıştırmanın başka bir yolu var mı?


9

Çözüm jQuery belgelerinde buldum inanıyorum:

Tüm paragrafı 50 sol stile ve 1 opaklığa (opak, görünür) animasyon uygular ve animasyonu 500 milisaniye içinde tamamlar. Ayrıca kuyruk dışında yapacak, yani sıra beklemeden otomatik olarak başlayacak .

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

basitçe ekleyin: queue: false.


1
Komple fonksiyon bu fonksiyona nasıl entegre edilir? : s
Brainfeeder

8

Yukarıdakileri oldukları gibi çalıştırırsanız, aynı anda çalışıyor gibi görünecektir.

İşte bazı test kodu:

<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>

3

Ardışık canlandırma çağrılarının aynı anda çalıştıkları görünümü vereceği doğru olsa da, altta yatan gerçek, paralelliğe çok yakın çalışan farklı animasyonlardır.

Animasyonların gerçekten aynı anda çalıştığından emin olmak için şunu kullanın:

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

'Animasyonum' kuyruğuna başka animasyonlar eklenebilir ve son animasyon sakat bırakmalarına bağlı olarak tümü başlatılabilir.

Şerefe, Anthony


2

Nesnelerdeki değerleri canlandırma ile ilgili bu parlak blog yayınına bakın .. daha sonra değerleri istediğiniz gibi% 100 aynı anda canlandırmak için kullanabilirsiniz!

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

İçeri / dışarı kaydırmak için böyle kullandım:

        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');
                }
            });
        }


0

Birine yardım etmek için cevabımı göndererek, en çok puan alan cevap benim sorunumu çözmedi.

Aşağıdakileri [üst cevaptan] uyguladığımda, dikey kaydırma animasyonum ileri geri sarsıldı:

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

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

Ben anılacaktır: W3 Okulları Seti Aralığı ve, yani 'Dizimi' bölümü sorunumu çözdü:

setInterval (işlev, milisaniye, param1, param2, ...)

Formdaki parametrelerimi { duration: 200, queue: false }sıfır süre zorladı ve sadece rehberlik için parametrelere baktı.

Uzun ve kısa, işte benim kodum, neden çalıştığını anlamak istiyorsanız, bağlantıyı okuyun veya beklenen parametreleri analiz edin:

var $scrollDiv = '#mytestdiv';
var $scrollSpeed = 1000;
var $interval = 800;

function configureRepeats() {
   window.setInterval(function () {
       autoScroll($scrollDiv, $scrollSpeed);
   }, $interval, { queue: false });
};

'AutoScroll' nerede:

    $($scrollDiv).animate({
        scrollTop: $($scrollDiv).get(0).scrollHeight
    }, { duration: $scrollSpeed });

    //Scroll to top immediately 
    $($scrollDiv).animate({
        scrollTop: 0
    }, 0);

Mutlu kodlama!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.