在一般意義上的jQuery代碼中出現的順序執行,同其他任何JavaScript代碼。但是,使用setTimeout()
或Ajax的函數可能會在延遲後執行某些操作。
在您的問題的代碼中,您使用的是.delay()
method,它只爲jQuery animation effects添加延遲,並且.css()
方法不參與動畫。正如費利克斯的評論所指出的那樣,這兩個CSS變化緊接着彼此發生,太快而看不到第一種顏色。
更具體地說,你的第一個.css()
調用發生,那麼.delay()
調用發生,但它的作用是延遲添加到動畫隊列,然後立即返回,然後你的第二個電話.css()
發生。如果你排隊等待其他動畫效果,它們會在延遲之後發生。瀏覽器在單個線程中運行JavaScript,因此您不會同時運行兩個代碼塊 - 請注意,該單線程也是瀏覽器用於呈現的線程(這就是爲什麼長時間運行的循環會使瀏覽器無響應)。
所以,你可能自然會問,沒有辦法改變css設置的方式參與jQuery的動畫過程嗎?那麼是的,你可以使用.animate()
方法 - 除了它不適用於顏色。至少,不是默認的。但是,如果包括jQuery UI擴展到jQuery的然後你可以使用.animate()
改變顏色如下:
$(document).ready(function() {
$(".post").animate({
"color": "#0000FF"
}, 0).delay(800).animate({
"color": "##FF0000"
}, 0);
});
演示:http://jsfiddle.net/jZUzP/1/
注意的是,上述所謂.animate()
爲0的持續時間,以便顏色變化將是瞬間的。
延伸閱讀:
如果你不希望包括jQuery的用戶界面,以及jQuery的只是一些簡單的像這樣當然也可以使用(非jQuery,標準JS)setTimeout()
function排隊你的第二個CSS變化:
$(document).ready(function(){
var $post = $(".post").css({"color":"#0000FF"});
setTimeout(function() {
$post.css({"color":"##FF0000"});
}, 800);
});
(jQuery動畫效果在內部使用setTimeout()
。)
你能發佈一些代碼,最好在jsfiddle.net? – lowerkey 2012-03-05 02:01:39
沒有代碼我們都在凝視一個水晶球 – charlietfl 2012-03-05 02:03:37
他們*是*按順序執行,但他們可能執行得太快了,你不會注意到任何中間的視覺變化。'delay'默認只對動畫功能有影響(而'.css()'不是其中之一),儘管你也可以將它用於自定義函數(這裏可能已經提到過了)。 – 2012-03-05 02:04:28