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

使用requestAnimationFrame来实现浏览器的

ruisui883个月前 (01-20)技术分析26

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

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/408.html

分享给朋友:

“使用requestAnimationFrame来实现浏览器的” 的相关文章

react hooks自定义组件居然能这样做

前言  这里写一下如何封装可复用组件。首先技术栈 react hooks + props-type + jsx封装纯函数组件。类组件和typeScript在这不做讨论,大家别白跑一趟。接下来会说一下封装可复用组件的思路,比如一个新手应该怎么去封装,都需要有哪些东西。  然后说一些复杂组件需要的功能,...

Git 分支管理策略汇总

最近,团队新入职了一些小伙伴,在开发过程中,他们问我 Git 分支是如何管理的,以及应该怎么提交代码?我大概说了一些规则,但仔细想来,好像也并没有形成一个清晰规范的流程。所以查了一些资料,总结出下面这篇文章,一共包含四种常见的分支管理策略,分享给大家。Git flow在这种模式下,主要维护了两类分支...

VIM配置整理

一、基本配色set number set showcmd set incsearch set expandtab set showcmd set history=400 set autoread set ffs=unix,mac,dos set hlsearch set shiftwidth=2 s...

多项修正 尼康D4s发布最新1.10版固件

尼康公司与2014年8月27日发布了D4s的最新固件,固件版本号为C:1.10。这次固件升级,主要解决了一些BUG,并且对拍摄菜单与相机操作做了一定调整。下面是本次新固件的具体信息:尼康发布D4s最新C固件 1.10版对C固件升级到1.10版所作的修改:当选定运动VR模式并换上 AF-S 尼克尔 4...

学前端,这30个CSS选择器,你必须熟记

你学会了基本的id,class类选择器和descendant后代选择器,然后就觉得完事了吗?如果这样,你就会错过许多灵活运用CSS的机会。虽然本文提到的许多选择器都属于CSS3,并且只能在现代的浏览器中使用,但学会这些是大有好处的。什么是CSS选择器呢?每一条css样式定义由两部分组成,形式如下:[...

JS数组过滤元素的方法

引言JavaScript 作为前端开发的核心技术之一,在现代 Web 开发中扮演着举足轻重的角色。随着 Web 应用越来越复杂,高效处理数据集合的需求日益凸显。本文旨在介绍 JavaScript 中数组过滤的基础知识及其在实际项目中的应用技巧。技术概述定义数组过滤是 JavaScript 提供的一种...