在 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的完成函数中,调用该函数开始下一次迭代。
如果您想要在淡出之前延迟(以确保给定消息显示一定时间),您可以在正确的位置添加此 .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);