Javascript setInterval vs setTimeout vs requestAnimationFrame
我最近编写了一个项目,通过以下方式触发动画,该项目中每7秒都会出现一些复杂的SVG SMIL多动画:Javascript setInterval vs setTimeout vs requestAnimationFrame,javascript,settimeout,setinterval,requestanimationframe,smil,Javascript,Settimeout,Setinterval,Requestanimationframe,Smil,我最近编写了一个项目,通过以下方式触发动画,该项目中每7秒都会出现一些复杂的SVG SMIL多动画: function startMyCustomAnim() { myElement.beginElement(); } window.setInterval( startMyCustomAnim, 7000 ); 执行此操作时,在我的SVG中经过一段时间后会发生奇怪的事情,例如它的元素消失等(SVG SMIL动画持续时间设置为0.5s,其中一些在0.5s结束时触发,持续时间为0.01s,以进
function startMyCustomAnim() { myElement.beginElement(); }
window.setInterval( startMyCustomAnim, 7000 );
执行此操作时,在我的SVG中经过一段时间后会发生奇怪的事情,例如它的元素消失等(SVG SMIL动画持续时间设置为0.5s,其中一些在0.5s结束时触发,持续时间为0.01s,以进行不可更改的调整)
我现在已经阅读了许多文章,了解了问题中提到的三种功能的比较,并想确认我对事物的理解是正确的:
- 基本上,永远不要使用
,尤其是在动画持续时间接近间隔持续时间的情况下,以避免在任何函数执行过程中出现问题/延迟时出现所谓的延迟和其他问题setInterval
- 对于较大的间隔,可以递归地使用
,也可以使用内部布尔变量跟踪执行状态setTimeout()
- 对于需要以高频率执行的回调;为确保相关动画顺利运行(例如,
侦听器),请在滚动
中调用回调requestAnimationFrame()
function startMyCustomAnim() {
myElement.beginElement();
window.setTimeout( startMyCustomAnim, 7000 );
}
这是我的案例的理想方法吗?关于动画,如果这有关系的话,它们是两组2个附加的
animateTransform
标记(一个用于rotate
,一个用于translate
),每对应用于一个特定元素。你说得对。setTimeout和setInterval对我来说是一样的,只是使用了不同的用法。如果您想要一个具有间隔的无限循环,那么setInterval更好。但如果你只是想在5秒后超时,就用timeout。所以在你的情况下,我更喜欢间隔时间。