Как запустить две анимации jQuery одновременно? - PullRequest
203 голосов
/ 09 августа 2009

Можно ли запустить две анимации на двух разных элементах одновременно? Мне нужен противоположный вопрос Анимации очередей Jquery .

Мне нужно сделать что-то вроде этого ...

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

но запустить эти два одновременно. Единственное, о чем я мог подумать, это использовать setTimeout один раз для каждой анимации, но я не думаю, что это лучшее решение.

Ответы [ 6 ]

404 голосов
/ 18 января 2011

да, есть!

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

    $("#second").animate({
       width: '600px'
    }, { duration: 200, queue: false });
});
17 голосов
/ 03 ноября 2009

Это будет работать одновременно, да. Что делать, если вы хотите запустить две анимации на одном элементе одновременно?

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

Это заканчивается очередями анимаций. чтобы запустить их одновременно, вы должны использовать только одну строку.

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

Есть ли другой способ одновременно запустить две разные анимации на одном и том же элементе?

8 голосов
/ 08 апреля 2011

Я считаю, что нашел решение в документации по jQuery:

Анимирует весь абзац в левом стиле 50 и непрозрачность 1 (непрозрачный, видно), завершая анимацию в течение 500 миллисекунд. Это также будет сделать это вне очереди, то есть автоматически начнется без ждет своей очереди .

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

просто добавьте: queue: false.

8 голосов
/ 09 августа 2009

Если вы запустите приведенные выше данные, как они есть, они будут работать одновременно.

Вот некоторый тестовый код:

<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>
2 голосов
/ 12 февраля 2017

Хотя верно, что последовательные вызовы animate создают видимость, которую они выполняют одновременно, основная истина заключается в том, что они представляют собой отдельные анимации, работающие очень близко к параллели.

Чтобы анимация действительно работала одновременно, используйте:

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

Дальнейшие анимации могут быть добавлены в очередь 'my-animation', и все они могут быть инициированы при условии их последней очереди анимации.

Ура, Anthony

2 голосов
/ 17 августа 2012

См. Этот блестящий пост в блоге об анимации значений в объектах. Затем вы можете использовать значения для анимации всего, что вам нравится, на 100% одновременно!

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

Я использовал это, чтобы скользить в / из:

        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');
                }
            });
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...