Подтвердить что ты не робот

Как запустить одновременно две анимации jQuery?

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

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

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

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

4b9b3361

Ответ 1

да есть!

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

Вот несколько тестовых кодов:

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

Ответ 4

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

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

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

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

Ответ 5

Посмотрите на это блестящее сообщение в блоге об анимации ценностей в объектах. Затем вы можете использовать значения для анимации, как вам нравится, на 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');
                }
            });
        }

Ответ 6

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

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

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

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

Cheers, Энтони

Ответ 7

Разместив свой ответ, чтобы помочь кому-то, ответ с самым высоким рейтингом не решил мою проблему.

Когда я реализовал следующее [из верхнего ответа], моя анимация вертикальной прокрутки просто дрожала взад-вперед:

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

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

Я упомянул: W3 Schools Set Interval, и это решило мою проблему, а именно раздел "Синтаксис":

setInterval(function, milliseconds, param1, param2,...)

Наличие моих параметров формы { duration: 200, queue: false } вынудило продолжительность ноль, и он только смотрел на параметры для руководства.

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

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

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

Где 'AutoScroll':

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

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

Удачного кодирования!