2011-04-23 82 views
0

我用這個命中了死衚衕,我的腦袋已經半天了。這個問題很奇怪,如果你願意查看我的源代碼:www.modwebsolutions.com/test2(警告:尚未優化,可能會鎖定瀏覽器幾秒鐘)。問題是,在Opera中setTimeouts的這個序列可以正常工作,但是在其他瀏覽器中只有第一個被執行,然後停止腳本的執行。從我的代碼Exerpt:setTimeout在Opera中可用,但在其他瀏覽器中不可用

var a1=setTimeout(drawVertical([arguments]),1000); 
var b1=setTimeout(drawVertical([arguments]),1000); 
var c1=setTimeout(drawVertical([arguments]),1000);  
var d1=setTimeout(drawVertical([arguments)],1000); 

嘗試一切,在引號引起的功能,尋找其他的語法錯誤,沒有任何幫助。正如我所說的那樣奇怪的是 - 在Opera中一切正常。 UPDATE:也適用於Chrome瀏覽器,這使得它更加混亂......

UPDATE2:同樣的例子沒有超時,工作得很好(雖然慢):www.modwebsolutions.com/test

回答

1

你在這裏做什麼設置超時之前調用的函數。當代碼看到drawVertical([arguments])時,立即調用該函數。該函數的返回值是您作爲第一個參數傳入setTimeout的內容,因此除非drawVertical返回函數,否則這將不起作用。

所以,你可以得到這個通過給setTimeout要調用的函數的工作:

var args = arguments; 
var a1=setTimeout(function() { drawVertical([args]); },1000); 
... 

編輯:我設置了外argumentsargs變量,因爲arguments將在內部函數不同。

+0

嘗試了匿名函數方法 - 它在幾乎所有的瀏覽器上都能正常工作,但是......瀏覽器速度更慢,而且最奇怪的是 - 所有該函數產生的線條也有一些厚厚的黑色陰影,這完全無法解釋並且不合邏輯。 setTimeout與畫布線樣式有什麼共同之處?... – Caballero 2011-04-23 20:25:16

+0

'setTimeout'不會導致瀏覽器變慢,但也許你調用的次數比你想象的要多,因此調用'drawVertical'比你多認爲?也許粗黑線是在同一地點附近多次畫線的結果?我會在某處放置一個'alert'或者一個'console.log'來確保這個函數按照它應該的方式行事。 – 2011-04-24 06:31:47

2

你應該函數和超時之後爲您傳遞參數。看一看在documentation

var a1 = setTimeout(drawVertical, 1000, [arguments]); 
+0

我試圖使用這種結構 - 結果與匿名函數一樣 - drawVertical函數渲染的畫布上的線條都有一些可怕的黑色陰影,我絕對沒有添加。請注意,如果沒有超時,所有工作都可以正常工作:www.modwebsolutions.com/test – Caballero 2011-04-23 20:36:56

相關問題