В JQuery, вы не можете переплетать анимации и не-анимации в том, как вы doi и ожидайте, что они будут работать в правильном порядке. Анимации перейдут в очередь анимации и будут упорядочены один за другим, но не-анимации будут выполняться немедленно. Таким образом, все будет не в правильном порядке.
Чтобы сделать что-то подобное, вы можете использовать такой код.
messages=["Welcome!","Добро пожаловать!"];
function fadeMessages(msgs, div) {
var i = 0;
function next() {
if (i < msgs.length) {
div.fadeOut(1000, function() {
div.html(msgs[i++]).fadeIn(1000, next);
});
}
}
next();
}
fadeMesssages(messages, div);
Это использует функции завершения обоих fadeIn()
и fadeOut()
выполнять следующие шаги. Вот как это работает:
- Он исчезает с div.
- В функции завершения fadeOut он устанавливает следующее сообщение и затем запускает fadeIn.
- Он продвигает счетчик сообщений.
- В функции завершения функции fadeIn, она вызывает функцию для запуска следующей итерации.
Если вы хотите задержку перед FADEOUT (чтобы убедиться, что данное сообщение отображается в течение определенного времени), вы можете добавить, что с этим .delay(2000)
добавленным в нужном месте:
messages=["Welcome!","Добро пожаловать!"];
function fadeMessages(msgs, div) {
var i = 0;
function next() {
if (i < msgs.length) {
div.delay(2000).fadeOut(1000, function() {
div.html(msgs[i++]).fadeIn(1000, next);
});
}
}
next();
}
fadeMesssages(messages, div);
Если вы хотите задержку перед началом следующей итерации, вы можете сделать это, как это с SetTimeout:
messages=["Welcome!","Добро пожаловать!"];
function fadeMessages(msgs, div) {
var i = 0;
function next() {
if (i < msgs.length) {
div.fadeOut(1000, function() {
div.html(msgs[i++]).fadeIn(1000, function() {
setTimeout(next, 2000);
});
});
}
}
next();
}
fadeMesssages(messages, div);
пожалуйста, вы можете, редактировать код http://jsfiddle.net/QQy6X/ ?? –
Я не могу понять, как «заставить каждую анимацию ждать предыдущих» –
Вам нужно обновить страницу, мой друг ';-)' –