猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
阿里前端面试题:requestAnimationFrame实现类似setInterval的计时器
使用requestAnimationFrame实现类似setInterval的计时器
翻阅古今
浏览 245
回答 2
2回答
慕标琳琳
供参考,没有实现字符串功能,反正也不推荐使用。functionsetInterval2(cb,delay,...args){//记录所有正在运行的interval用于撤销letpool=window[Symbol.for('IntervalPool')]if(!pool){pool={}window[Symbol.for('IntervalPool')]=pool}//interval最低10ms,虽然每frame至少得16msdelay=delay>=10?delay:10//intervalidletticket=Date.now()//每次interval开始时间letstartTime=ticketpool[ticket]=trueloop()returnticketfunctionloop(){if(!pool[ticket]){return}constnow=Date.now()if(now-startTime>=delay){startTime=nowcb(...args)}requestAnimationFrame(loop)}}functionclearInterval2(ticket){letpool=window[Symbol.for('IntervalPool')]if(pool&&pool[ticket]){deletepool[ticket]}}
0
0
0
天涯尽头无女友
functiona(callback){requestAnimationFrame(function(){//你的代码callback&&callback()a()})}需要注意requestAnimationFrame的浏览器兼容性问题window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||function(callback){//为了使setTimteout的尽可能的接近每秒60帧的效果window.setTimeout(callback,1000/60);};window.cancelAnimationFrame=window.cancelAnimationFrame||Window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.msCancelAnimationFrame||window.oCancelAnimationFrame||function(id){//为了使setTimteout的尽可能的接近每秒60帧的效果window.clearTimeout(id);}
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
JavaScript
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续