首页
学习
活动
专区
圈层
工具
发布

requestAnimationFrame实现动画效果

html动画一般会采用css3的形式去做,当然也比较建议用css去做动画。但是有时候一些动画只能使用js来完成,常用的js动画方案是使用计时器来完成。...于是就引入了一个新的动画执行方式-- window.requestAnimationFrame()。它告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。...它采用的是系统时间间隔,以保证最佳的绘制效率,不会因为时间过短造成过度绘制,也不会因为时间间隔太长,产生动画卡顿的现象。...将不会进行重绘或回流,这当然就意味着更少的CPU、GPU和内存使用量 requestAnimationFrame是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的话...requestAnimationFrame使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用。

2.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    js动画requestAnimationFrame详解「建议收藏」

    requestAnimationFrame() 他的作用就是代替定时器做更加流畅高性能的动画,做可以匹配设备刷新率的动画,他解决了定时器做动画时间间隔不稳定的问题(也就是解决定时器做动画不流畅的问题)。...那么requestAnimationFrame()使用的就是cancelAnimationFrame()关闭动画。...如果我们使用定时器setTimeout做动画,我们假设显示器的刷新率为60hz(60hz指的是每秒1播放60张动画)。...(fn); } else { cancelAnimationFrame(timer); } }); 了解了基本的用法你就可以使用requestAnimationFrame()来做动画了...如果你担心兼容性问题,可以使用如下做法(这里引用的是阮一峰大神的代码) window.requestAnimFrame = (function(){ return window.requestAnimationFrame

    11.1K22

    canvas绘制动画原理及案例讲解(绘制小恐龙动画、时钟等)

    canvas的出现颠覆了Flash的地位,无论是广告、游戏都可以用canvas实现,Canvas是一个轻量级的画布,在使用canvas绘制的时候,一旦绘制成功,就会像素化它们,canvas没有再次从画布上得到这个图形的能力...在搞懂了canvas绘制动画的原理和方法,我们来绘制几个动画: 奔跑的小恐龙 这个动画的原理很简单,就是使用setInterval()方法不断地添加渲染的图片(这里不需要清屏步骤,因为我们直接绘制新的图片覆盖了旧图片...: 小恐龙 有的小伙伴可能会问,既然在前边讲了那么多setInterval()方法的缺点和requestAnimationFrame()方法的优势,为什么在这里绘制动画还要使用setInterval(...别急,等下我们会使用requestAnimationFrame()方法重新写一遍这个动画。...绘制钟表同样是遵循清屏→更新→渲染的原理,不过这里我们使用的是requestAnimationFrame()方法,大致思路就是使用requestAnimationFrame方法不断获取当前的时间,包括时

    4K30

    使用canvas绘制圆弧动画

    初始画布 对于canvas的绘制,首先需要在html内指定一块画布,即, 可以看做是在PS中新建一个空白文档,之后所有的操作都将呈现在这个文档之上,与PS的区别是,canvas...当不设置样式宽高时,浏览器中canvas大小由画布大小决定(在实际开发中,碰到一个例外,是在使用mapbox时,绘制map的标签如果只设置canvas画布大小时,在ios移动端的浏览器上显示异常,PC正常...x, y:在canvas当中,坐标系默认以左上角为原点,如果想让圆弧动画以画布中心点旋转,可以将圆心点设置为画布中心点,即画布长宽的1/2,假设设置的画布长宽均为100,那么圆心点的坐标即为(50, 50...),这个圆就绘制在了画布中间。...window.requestAnimationFrame() 借助requestAnimationFrame,来对canvas圆弧进行不断的重绘,每次重绘canvas之前清空画布,每轮动画方向角偏移2

    1.6K20

    requestAnimationFrame的使用

    在Web应用中,实现动画效果的方法比较多,JavaScript 中可以通过定时器 setTimeout 来实现,css3 可以使用 transition 和 animation 来实现,html5 中的...除此之外,html5 还提供一个专门用于请求动画的 API,即  requestAnimationFrame(rAF),顾名思义就是 “请求动画帧”。 ...CSS 动画原理 根据上面的原理我们知道,你眼前所看到图像正在以每秒 60 次的频率绘制,由于频率很高,所以你感觉不到它在绘制。...换句话说就是,rAF 的执行步伐跟着系统的绘制频率走。它能保证回调函数在屏幕每一次的绘制间隔中只被执行一次,这样就不会引起丢帧现象,也不会导致动画出现卡顿的问题。...(render); 除此之外,rAF 还有以下两个优势: CPU节能:使用 setTimeout 实现的动画,当页面被隐藏或最小化时,setTimeout 仍然在后台执行动画任务,由于此时页面处于不可见或不可用状态

    1.2K20

    前端|利用画布制作地球轨道

    一.什么是 画布标签常用于绘制图像,但是, 元素本身并没有绘制能力,它仅仅是图形的容器,要想通过画布标签来绘制图像,还需要调用js方法。...其中最常见得方法是getContext()方法,它可返回一个对象,该对象提供了用于在画布上绘图的方法和属性,可在画布上绘制文本、线条、矩形、圆形等等。...今天就利用 画布来绘制一下地球轨道的效果。 ? 图1.1 效果图 二.基础知识介绍 canvas只有height高度和width宽度两个属性。...这里要用到动画命名,采用requestAnimationFrame()方法。这个方法是告诉浏览器执行动画,并请求浏览器调用指定的函数以在下次重绘之前更新动画。该方法将回调作为在重绘之前调用的参数。...注意:如果要在下次重绘时为另一帧设置动画,则回调例程必须自己调用requestAnimationFrame()。

    2.3K20

    canvas画布实现矩形的绘制

    简单实现两种矩形的绘制: 第一种矩形背景填充简单说就是背景填充的实心矩形 代码实现: 绘制一个实心矩形cv.fillRect(x,y,width,height)绘制之前声明绘制的实心矩形颜色使用fillStyle...cv.fillRect(100,100,200,200); } 第二种矩形有线条构成,矩形内部没有填充可以设置矩形线条的颜色,线条宽度也叫空心矩形 代码实现: 绘制一个空心矩形...cv.strokeRect(x,y,width,height)绘制之前声明绘制的实心矩形颜色使用strokeStyle,线条宽度使用lineWidth=10;表示线条宽度10像素!...#26faaf'; //空心矩形strokerect(x,y,width,height) cv.strokeRect(50,80,220,220); } 注意:填充使用...fillRect,绘制空心使用strokeRect,样式等属性使用在构造矩形之前进行使用,填充相关使用fill,空心相关的使用stroke ---- get一下:         在矩形内进行清除已经绘制矩形的某个区域可以使用清除实现

    2.8K30

    震惊,canvas文字粒子效果,只需要100行代码,简单易懂。

    canvas是使用JavaScript程序绘图(动态生成),相比于css,可以更加简单方便的绘制细节的样式。其中最强大的功能莫过去像素的处理。一个像素一个像素去绘制任何想要的展示效果。...5.使用requestAnimationFrame来绘制每一帧的画布 就这么简单,只要100行代码,就能学会简单的文字动态效果 源码解析 主生成画布 了解基本的canvas API,怎么这么懒!!!...measureText,获取文字的宽度,为了能够在画布中间绘制文字。...启动动画 文字位置,粒子运动轨迹也确定好了,下面该如何开启动画?如何暂停动画?...小记:cancelAnimationFrame取消动画,要跟在requestAnimationFrame后面。

    1.2K20

    ❤️创意网页:创建更炫酷的动态网页——彩色数字(1到9)粒子动画

    我们将使用HTML5的Canvas元素和JavaScript来实现一个彩色数字粒子动画。...这个动画将在浏览器中展示一组随机位置和颜色的彩色数字粒子,它们将以不同的速度从画布顶部飘落至底部,并循环重新开始,形成一个华丽的视觉效果。...我们将定义一个Particle类来表示每个彩色数字粒子,并使用Canvas的上下文绘制这些粒子。...初始化粒子数组,并在画布上随机位置创建一定数量的粒子。 定义animate函数来清空画布并更新、绘制所有的粒子。我们使用requestAnimationFrame来实现连续的动画效果。...每次刷新页面,你都会看到不同位置、不同颜色的彩色数字粒子在画布上飘落。这个效果利用了Canvas和JavaScript来实现动态绘制和更新,创造了一个视觉上引人注目的交互体验。

    58110

    第05步《前端篇》第1章创建第一个小游戏项目第2课

    学习目标 学习画布如何创建画布,如何清空画布,如何绘制矩形; 学习如何绘制网像,了解如何实现动画; 学习如何进行人机交互; 从整体上理解微信小游戏是如何运行的,如何展示界面并与用户进行交互的; 学习如何命名变量...主要知识点/技能点 在小游戏中画布是使用 wx.createCanvas接口创建的,第一个被创建的是上屏画布,第二次、第三次及后面第N次创建的画布则是离屏画布,离屏画布上绘制的内容默认不会显示在屏幕上。...所谓的动画就是静态图片的快速叠加和切换。 在HTML5开发中,一般通过定时器和requestAnimationFrame方法实现动画效果。...在实现动画时,使用requestAnimationFrame创建动画,在效率上优于setInterval和setTimeout。 小结 所谓人机交互,就是获取用户的互动消息,然后及时做出反馈。...也因为这个原因,在HTML5或小游戏开发中,使用与帧频绑定的requestAnimationFrame函数创建动画,总是比使用setInterval、setTimeout定时器要好很多。

    1.3K20

    提高JavaScript动画的性能

    因此,如果您避免对触发布局或绘制操作的CSS属性进行动画化,并坚持使用诸如转换和不透明度之类的属性,那么您将看到动画性能的显著提高,因为现代浏览器在优化这些属性方面做得非常出色。...现在,您可以使用一个为流畅的web动画(DOM animation, canvas等)定制的本地JavaScript方法,称为requestAnimationFrame()。...将处理诸如滚动、调整大小、鼠标事件等事件的代码与使用requestAnimationFrame()处理屏幕更新的代码分离开来,是优化动画代码以提高性能的好方法。...7、使用屏幕外的画布进行复杂的绘图操作 这个技巧与优化HTML5 Canvas的代码有关。...如果您的框架涉及复杂的绘图操作,那么一个好主意是创建一个屏幕外的画布,您在其中执行所有的绘图操作一次或仅当发生更改时,然后在每个框架上绘制屏幕外的画布。

    2.3K20

    ❤️创意网页:绚丽粒子雨动画

    今天,我们将一起学习如何使用 HTML、CSS 和 JavaScript 来创造一个更炫酷的动态网页示例。我们将在网页中添加许多随机颜色的粒子,让它们以不同的速度在画布上飘动,形成一个美妙的粒子效果。...我们还将创建一个粒子数组,并在画布上动态绘制这些粒子,形成粒子效果。...ctx,用于在画布上绘制粒子。...我们让每个粒子沿竖直方向运动,并在到达画布底部时将其重新放置到画布顶部,实现循环运动。 draw 方法用于绘制粒子,我们使用 ctx.arc 方法绘制圆形粒子,并设置颜色为随机的彩虹色。...在每一帧中,我们清空画布、更新每个粒子的位置,并绘制粒子,然后使用 requestAnimationFrame 方法递归调用 animate 函数,实现连续的动画效果。

    35510

    Threejs入门之六:利用HTML5的requestAnimationFrame方法实现物体的旋转

    requestAnimationFrame使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用。...的执行步伐跟着系统的绘制频率走。...它能保证回调函数在屏幕每一次的绘制间隔中只被执行一次,这样就不会引起丢帧现象,也不会导致动画出现卡顿的问题。...2.在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,减少了CPU、GPU和内存使用量 3.requestAnimationFrame是由浏览器专门为动画提供的API...,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态下的话,动画会自动暂停,有效节CPU的开销Threejs中利用requestAnimationFrame实现动画接上节内容,首先在index.js

    1.6K20
    领券