В jQuery вы не можете переплетать анимацию и не анимацию так, как вы это делаете, и ожидать, что они будут работать в правильном порядке.Анимации будут помещаться в очередь анимации и там будут последовательно чередоваться, но все анимации будут выполняться немедленно.Таким образом, вещи не будут происходить в правильном порядке.
Чтобы сделать что-то, как вы хотите, вы можете использовать код, подобный этому.
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);