анимировать несколько Теги Последовательная
Вы можете использовать JQuery встроенный в анимации очереди, если вы просто выбрать тег как тело, чтобы сделать глобальную очередями:
// Convenience object to ease global animation queueing
$.globalQueue = {
queue: function(anim) {
$('body')
.queue(function(dequeue) {
anim()
.queue(function(innerDequeue) {
dequeue();
innerDequeue();
});
});
return this;
}
};
// Animation that coordinates multiple tags
$(".button").click(function() {
$.globalQueue
.queue(function() {
return $("#header").animate({top: "-50"}, "slow");
}).queue(function() {
return $("#something").animate({height: "hide"}, "slow");
}).queue(function() {
return $("ul#menu").animate({top: "20", left: "0"}, "slow");
}).queue(function() {
return $(".trigger").animate({height: "show", top: "110", left: "0"}, "slow");
});
});
http://jsfiddle.net/b9chris/wjpL31o0/
Так , вот почему это работает, и что он делает:
Звонок в $.globalQueue.queue()
просто вызывает вызов анимации вашего тега, но он ставит его в очередь на теге тела.
Когда jQuery удаляет анимацию вашего тега в очереди на тело, анимация вашего тега начинается в очереди для вашего тега, но, как работает анимационная среда jQuery, любой пользовательский обратный вызов анимации вызывает очередь анимации тега (тело в этот случай) для остановки, пока пользовательская анимация не вызовет функцию переданного dequeue()
. Таким образом, даже если очереди для вашего анимированного тега и тела являются отдельными, очередь тегов тела теперь ждет своего вызова dequeue()
. http://api.jquery.com/queue/#queue-queueName-callback
Мы просто делаем последним в очереди элемента в очереди тега вызова для продолжения глобальной очереди, вызвав функцию dequeue()
- это то, что связывает очередь вместе.
Для удобства метод globalQueue.queue
возвращает ссылку this
для легкой цепочки.
setInterval
Для полноты картины, это легко приземлиться здесь просто ищет альтернативу setInterval
- то есть вы не столько ищет, чтобы сделать отдельные анимации координат, а просто стрелять их на без неожиданного перенапряжения в вашей анимации, вызванной тем, что новые браузеры будут откладывать очереди анимации и таймеры для экономии процессора.
Вы можете заменить вызов setInterval
так:
setInterval(doAthing, 8000);
С этим:
/**
* Alternative to window.setInterval(), that plays nicely with modern animation and CPU suspends
*/
$.setInterval = function (fn, interval) {
var body = $('body');
var queueInterval = function() {
body
.delay(interval)
.queue(function(dequeue) {
fn();
queueInterval();
dequeue(); // Required for the jQuery animation queue to work (tells it to continue animating)
});
};
queueInterval();
};
$.setInterval(doAthing, 8000);
http://jsfiddle.net/b9chris/h156wgg6/
И избежать этих неудобных взрывов анимации, когда вкладка фон имеет анимацию повторно включен браузером.
6.9kb прокомментирован, без ограничений и без gzip. Prob <1kb на самом деле – redsquare
Я искал, чтобы сделать очень похожее на этот вопрос, поэтому я создал небольшой JQuery-плагин (https://github.com/fillswitch/Jquery-Sequential-Animations). Надеюсь, это поможет некоторым другим! –