2012-05-11 70 views
0

正如标题所说..有任何可能的方式有简单的JavaScript动画,而不使用jQuery,setTimeout的,和setInterval的。我一直在研究太久,找不到任何东西。可能没有办法做到这一点,只是想知道。寻找跨浏览器的东西,所以CSS动画也无法工作。JavaScript动画WITHOUT jQuery的/的setTimeout/setInterval的

+0

有一个关键的问题丢失了:为什么'setTimeout()'和'setInterval()'是你的问题? – Amadan

+0

为什么你甚至想要做一个没有jQuery的动画?这可能是触摸DOM的最佳/最快/最安全的方式。 – frenchie

+0

您可以使用动画GIF - 在所有浏览器中都支持,并且完全不需要任何JavaScript。 – RobG

回答

5

现在做大多数动画的“正确”方式是window.requestAnimationFrame,它的作用类似于setTimeout,因为它在指定的时间运行回调函数。

它的优化,在60fps运行,在某些浏览器(FF),它会给你毫秒的确切数量,直到下一个平局,这样就可以非常精确地计算动画位置。

谷歌“requestAnimationFrame垫片”对于各种跨浏览器实现对旧的浏览器。垫片全部使用setTimeout —这是没有办法解决的。

+0

这是我在寻找的!谢谢! – ALF

+1

'window.requestAnimationFrame'只适用于某些浏览器(例如,在IE10之前没有IE版本,在5.3之前没有Safari版本,等等)。详情请参阅http://www.caniuse.com/#search=requestanimationFrame。而且,旧版浏览器的解决方法都使用'setTimeout()'或'setInterval()',所以没有办法。所以,如果你需要它在没有定时器的浏览器上工作,这个答案不能解决这个问题(因为没有解决方案)。 – jfriend00

+1

@ jfriend00 - 这不就是我在最后一句话中所说的吗? :) –

1

不,你怎么能没有间隔/超时,并能够跨浏览器做到这一点?你需要继续触发它。

1

除非你在用户输入上设置动画。如果您在用户触发鼠标移动事件或页面滚动事件时设置了某些动画,它可能会有效,但它会停下来,并且100%依赖于用户触发它。

0

不,我不认为这是做在JavaScript中的暂停,而无需使用setTimeout()setInterval()的任何方式。

我能想到的唯一的办法是到了JavaScript等待像一个XMLHttpRequest对象的反应,这是超越荒谬的一些事件。

如果您正在寻找一些方便的“暂停执行(x)毫秒并继续”,如在Unix系统上的Thread.sleep()或Unix系统上的usleep(),则不会有这样的事情可悲。

我记得听说为了计时的目的,在一个运行在Google Sketchup上的Ruby脚本中,有人花费了一段时间制作一个隐藏的HTML窗口,只是为了运行一个使用setInterval()的JavaScript,所以他们会有一个计时机制。我认为如果你为了运行JavaScript而仍然使用setInterval(),那么可能没有其他选择。