前面谈过一些动画的东西:9.浅谈前端实现动画效果的一些方式
今天正好要用上RAF。
之前也说过它的缺点,一是不能设置间隔时间,二是我觉得如果一个页面有多个动画,则需要调用N个requestAnimationFrame。
比如:
动画1 requestAnimationFrame(fn1)
动画2 requestAnimationFrame(fn2)
动画3 requestAnimationFrame(fn3)
.....
能不能在一个requestAnimationFrame下实现?
所以今天简单封装了一下,将以上两个问题解决。
//封装动画RAF函数 代替定时器
const rafQueue=[];
let rafId=0;
const rafStart=function(t){
rafQueue.forEach((o)=>{
if(o.intervalTime==undefined||o.lastTime==0||t-o.lastTime>=o.intervalTime){
o.fn(t);
o.lastTime=t;
return;
};
});
if(rafQueue.length)window.requestAnimationFrame(rafStart);
};
const setRaf=function(fn,intervalTime){
rafId++;
rafQueue.push({
fn,
intervalTime,
lastTime:0,
id:rafId
});
if(rafQueue.length==1)window.requestAnimationFrame(rafStart);
return rafId;
};
const clearRaf=function(id){
for(let i=0;i<rafQueue.length;i++){
if(rafQueue[i].id==id){
rafQueue.splice(i,1);
break;
};
};
};
调用:
let id=setRaf(fn,2000); //执行函数 间隔时间非必传
停止
clearRaf(id);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。