网站首页 > 知识剖析 正文
requestAnimationFrame动画辅助方法概述
通常来浏览器中实现动画,我们都使用setTimeout来每隔一段时间修改需要动画的属性,例如,修改指定元素颜色或者位置等等
和setTimeout方法等待特定时间后开始操作不一样,requestAnimationFrame会在下一次浏览器进行操作的时候调用对应的callback,如下:
window.requestAnimationFrame(callbackFunction);
这样的好处在于能够在浏览器的绘制周期中准确的绘制图形,因此动画更加顺畅和平滑,而且不会太依赖CPU命令执行
浏览器兼容性
requestAnimationFrame在Firefox4中被引入,并且被所有浏览器广泛支持包括了IE10,而且针对老浏览器的向前兼容也非常容易
目前不同浏览器或者不同版本浏览器支持的requestAnimationFrame前缀不同,这里我们使用如下代码保证对于requestAnimationFrame的兼容性:
window.requestAnimFrame=(function(callback){returnwindow.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){window.setTimeout(callback,1000/60);};})();
以上代码中,将支持firefox,chrome,opera,IE等浏览器,如果比较老的浏览器不支持requestAnimationFrame的话,则fallback方式使用setTimeou来实现动画
相关演示
使用requestAnimFrame实现一个画布动画效果:生成画布图形
首先介绍如何使用HTML5画布生成基础图形,定义HTML的canvas元素,如下:
获取画布上下文,代码如下:
varcanvas=document.getElementById('mycanvas');varctx=canvas.getContext("2d");
使用上下文ctx我们可以在画布中生成图形,创建如下方法:
functiondrawCharactor(x,y,bgcolor,strokescolor){ctx.fillStyle="#"+bgcolor;ctx.fillRect(x,y,25,25);ctx.fill();ctx.strokeStyle="#"+strokescolor;ctx.strokeRect(x,y,25,25);}
以上方法生成一个矩形,其中矩形填充颜色为bgcolor,生成矩形方法为fillRect,并且使用方法strokeRect添加描边效果,使用strokeStyle属性定义描边颜色
相关演示
使用requestAnimFrame实现一个画布动画效果:添加动画效果
上节学习了绘制一个静态图形,本节将介绍如何使用requestAnimFrame生成图形动画
首先定义一个基础的requestAnimFrame动画方法,如下:
varanimate=function(){......requestAnimationFrame(animate);}
在上面代码中,我们使用requestAnimationFrame自调用animate方法,生成动画所需的循环调用
在animate方法中,使用上节定义的drawCharactor方法动态的绘制图形,注意需要使用HTML5画布的清除方法来清除图形,并且调用drawCharactor重新绘制图形,这样生成一个图形的动画效果,如下:
varanimate=function(){x+=1,y+=1;//动态定义图形坐标位置ctx.clearRect(0,0,canvaswidth,canvasheight);//清除画布中的所有图形,以便再次绘制图形drawCharactor(x,y,'dd4814','999999');//绘制图形requestAnimationFrame(animate);}
使用以上代码即可生成一个移动的正方形效果
请点击“下一步:播放”详细查看代码书写过程和运行效果 (请注释掉最终生成代码的clearRect方法尝试区别)
相关演示
课程地址:
http://www.gbtags.com/gb/share/4910.htm
猜你喜欢
- 2025-03-07 Fabric.js 清空画布,甚至连画布元素也给你干掉
- 2025-03-07 好程序员:前端JavaScript全解析——Canvas绘制形状(上)
- 2025-03-07 Web 端实时防挡脸弹幕(基于机器学习)
- 2025-03-07 小程序开发之分享海报并保存到相册功能
- 2025-03-07 DEEPSEEK如何开发射击小游戏
- 2025-03-07 canvas学习和面向对象(二)
- 2025-03-07 推荐!开箱即用的前端图片压缩方案(附源码)
- 2025-03-07 用DEEPSEEK 写的小游戏,直接运行太牛了!~
- 2025-03-07 Canvas 从入门到劝朋友放弃(图解版)
- 2025-03-07 谈谈图片上传及canvas压缩的流程
- 05-05vin码怎么查车型?车辆VIN码的第十位代表什么信息?
- 05-05Java数组数据的操作之检查日期格式是否正确
- 05-05苹果序列号怎么看生产日期和产地?
- 05-05参考文献中的M J N D字母代表什么?
- 05-05闲鱼交易技巧,满满的干货(闲鱼的交易流程怎么样的?我是买家)
- 05-05忘记自已多少岁了?可试试年龄计算器
- 05-05汽车-剖析、解析车架号(VIN)中的第10位-车型年份
- 05-05干货|史上最全波特酒年份指南(波特酒 年份)
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)