setTimeout
是否可以使用WITHIN setInterval
?
我正在编写一些JavaScript来为一个奇怪的艺术项目制作一些DOM元素的动画。 我解释问题的最好方法是举个例子:
我有50个不同的div,我需要通过使用setInterval
更改屏幕上的位置来制作动画。我需要每个div以不同的速度移动。
我计划使用的解决方案是在我更大的changePosition函数中使用睡眠函数,这样我就可以为每个div传递不同的睡眠值。这样,我可以通过字典为每个div分配一个独特的移动速率。
我遇到的问题是JavaScript没有" sleep"。它只有setTimeout
,似乎无法在setInterval
循环中运行。
答案 0 :(得分:4)
setTimeout()
在setInterval()
内完美运行,但由于您试图模仿javascript不执行或没有的sleep()
,因此我觉得您正在尝试编写同步setTimeout()
异步工作时的代码。您需要重新考虑如何编写代码来执行此操作。
发布一些代码,我们可以提供更多具体帮助。
我并不完全确定我会遵循你想要做的事情,但是通过为每个对象使用一个单独的计时器,以不同的速率动画N个不同的东西可能是最容易的。然后可以按照自己的速率设置每个对象的计时器并检测它自己的完成情况,而不必从某个中央计时器管理它们。
此外,如果您在javascript中从头开始编写动画例程,那么您需要完成的工作量超出您的需求。这个问题已经解决了好几千次了,没有理由你必须自己重新发明它。一个简单的谷歌搜索“javascript动画示例”将显示各种样本和大量的代码,你可以基于你的。这是一个很好的教程:http://javascript.info/tutorial/animation。
像jQuery这样的流行库有各种各样的内置动画功能,可以为你做很多肮脏的工作。动画也可以在现代浏览器中使用CSS3(IE除外)。
答案 1 :(得分:0)
也许你正在寻找jQuery delay()函数? http://api.jquery.com/delay/
在这里:Can I use .delay() together with .animate() in jQuery?你可以看到delay()和animate()函数是如何协同工作的。