Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 超时后取消AnimationFrame_Javascript_Animation_Requestanimationframe - Fatal编程技术网

Javascript 超时后取消AnimationFrame

Javascript 超时后取消AnimationFrame,javascript,animation,requestanimationframe,Javascript,Animation,Requestanimationframe,我喜欢一个基于requestAnimationFrame的动画循环,在x毫秒后停止。我试图通过一个setTimeout来实现这一点,它在x之后删除cb。但是,由于setTimeout是事件循环中调用的最后一个事件,因此有时在调用移除之前会渲染多个动画帧 即使增量(应该已经取消但不是)总是很小,这也会打乱我的迭代逻辑。最后一个名为的动画帧必须在给定的时间帧x内 如果已经超过最大值,我真的想而不是检查每个循环 是否存在某种高优先级设置超时?基于承诺,可能?setTimeout不是事件循环中最后一个被

我喜欢一个基于requestAnimationFrame的动画循环,在x毫秒后停止。我试图通过一个setTimeout来实现这一点,它在x之后删除cb。但是,由于setTimeout是事件循环中调用的最后一个事件,因此有时在调用移除之前会渲染多个动画帧

即使增量(应该已经取消但不是)总是很小,这也会打乱我的迭代逻辑。最后一个名为的动画帧必须在给定的时间帧x内

如果已经超过最大值,我真的想而不是检查每个循环


是否存在某种高优先级设置超时?基于承诺,可能?

setTimeout
不是事件循环中最后一个被调用的对象,恰恰相反,在运行中,动画帧回调是最后一个被调用的对象

所以我不确定您做了什么,但使用setTimeout应该可以正常工作:

let stopped=false;
const startTime=performance.now();
让时间来吧;
设frame_id=requestAnimationFrame(循环);
设置超时(()=>{
取消动画帧(帧id);
停止=真;
log('stopped');
log(“rAF循环为%sms运行”,rafTime-startTime);
}, 2000);
函数循环(){
如果(停止){console.log('failed');}
rafTime=performance.now();
frame_id=requestAnimationFrame(循环);

}
你能发布你的代码吗?还不完全清楚,调试我们无法调试的代码很困难see@CertainPerformance当然虽然我认为这主要是围绕这个问题的,但是如果已经超过了最大值,我真的不想检查每个循环,那么你想让javascript引擎猜测你想要什么?顺便说一句,编程不是这样工作的,在大多数浏览器中,
setTimeout
故意添加了抖动,因此,不要期望ms的准确性setTimeout@JaromandaX我不太明白你想说什么。我想有一个函数添加到数组中x毫秒。在x时间内,它会被requestAnimationFrame循环拾取。我要求提供一种从数组中删除函数的一致方法。我知道setTimeout在x之后一致调用being时有一些问题。我假设这是因为requestAnimationFrame在事件循环中的优先级较低,因此我想知道是否还有其他可能在x时间之后调用函数(优先级较高)。