在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