2011-04-23 81 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

相关问题