当前位置:首页 > 技术文章 > 正文内容

使用requestAnimationFrame来实现浏览器的

zonemu2个月前 (07-17)技术文章17

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元素,如下:

<canvaswidth="300"height="300"id="mycanvas"></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

相关文章

2020年最漂亮的7个Linux发行版(最受欢迎的linux发行版)

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言对于想学习Linux的朋友们,心中一定有疑问,哪个Linux版本比较好入门,Li...

10分钟搞定gitlab-ci自动化部署(gitlab ci 配置)

gitlab-ci 是持续集成工具/自动化部署工具,类似 jenkins。持续集成 是将代码集成到共享存储库并尽可能早地自动构建/测试每个更改的实践 - 通常一天几次。概述在编码完成时都会进行打包发布...

gitlab简单搭建与应用(gitlab怎么用)

一、gitlab1、简介GitLab是利用Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。与Github类似,GitLab...

迁移GIT仓库并带有历史提交记录(git 迁移仓库)

迁移git仓库开发在很多时候,会遇到一个问题。GIT仓库的管理,特别是仓库的迁移。我需要保留已有的历史记录,而不是重新开发,重头再来。我们可以这样做:使用--mirror模式会把本地的分支都克隆。//...

web前端入门:css+html5+javascript同时学可以吗?

HTML+CSS+JS是前端基础核心知识,肯定是都要学的。在web前端中,HTML是结构标准,CSS是样式标准,JS是行为标准,三者缺一不可。说的直白点,HTML就是骨架,CSS就是皮肤,JS就是灵魂...

(一)熟练HTML5+CSS3,每天复习一遍

前言学习网页的概念和分类,了解静态网页和动态网页的不同;了解网页浏览器的工作原理。了解HTML,XHTML,HTML5的概念,制作简单的HTML页面的开发。什么是网页可以在internet上通过网页浏...