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



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



мне нужно сделать что-то подобное...



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


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

535   6  

6 ответов:

да есть!

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

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

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

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

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

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

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

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

вот тестовый код:

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

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

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

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

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

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

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

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

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

дополнительные анимации могут быть добавлены в очередь "моя анимация", и все они могут быть инициированы при условии, что последняя анимация dequeue их.

Ура, Энтони

Comments

    Ничего не найдено.