在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()
和完成功能来进行接下来的步骤。以下是它的工作方式:
- 它淡出了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);
可以请你,编辑代码http://jsfiddle.net/QQy6X/? – 2011-12-24 04:38:35
我无法弄清楚如何“让每个动画等待先前的” – 2011-12-24 04:41:58
你需要刷新页面,我的朋友';-)' – 2011-12-24 04:43:04