iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JS怎么使用window.requestAnimationFrame()实现逐帧动画
  • 419
分享到

JS怎么使用window.requestAnimationFrame()实现逐帧动画

2023-07-02 11:07:52 419人浏览 薄情痞子
摘要

这篇文章主要讲解了“js怎么使用window.requestAnimationFrame()实现逐帧动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS怎么使用window.request

这篇文章主要讲解了“js怎么使用window.requestAnimationFrame()实现逐帧动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS怎么使用window.requestAnimationFrame()实现逐帧动画”吧!

window.requestAnimationFrame() 方法告诉浏览器您希望执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画。该方法使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用。

如果你想做逐帧动画的时候,你应该用这个方法。这就要求你的动画函数执行会先于浏览器重绘动作。通常来说,被调用的频率是每秒60次,但是一般会遵循W3C标准规定的频率。如果是后台标签页面,重绘频率则会大大降低。

基本语法:

requestID = window.requestAnimationFrame(callback);  // Firefox 23 / IE10 / Chrome / Safari 7 (incl. iOS)requestID = window.mozRequestAnimationFrame(callback);  // Firefox < 23requestID = window.WEBkitRequestAnimationFrame(callback); // Older versions Chrome/Webkit 

浏览器支持情况:

JS怎么使用window.requestAnimationFrame()实现逐帧动画

下面通过两个简单的Demo介绍下window.requestAnimationFrame() 方法的使用

返回顶部

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>返回顶部</title>  <style>    .box {      margin: 0 auto;      width: 100%;      height: 5000px;    }     .box1 {      background: #b94a48;    }     .box2 {      background: #fb8c00;    }     .box3 {      background: #669900;    }     .box4 {      background: #c0a16b;    }     .top {      position: fixed;      right: 20px;      bottom: 20px;      width: 40px;      height: 40px;      background: #8dc7ff;      border-radius: 50%;      cursor: pointer;    }  </style>  <script>    window.requestAnimationFrame = (function () {      return window.requestAnimationFrame ||        window.webkitRequestAnimationFrame ||        window.mozRequestAnimationFrame ||        function (callback) {          window.setTimeout(callback, 6000 / 60)        }    })()     window.cancelAnimFrame = (function () {      return window.cancelAnimationFrame ||        window.webkitCancelAnimationFrame ||        window.mozCancelAnimationFrame ||        window.oCancelAnimationFrame ||        window.msCancelAnimationFrame ||        function (callback) {          window.clearTimeout(callback)        }    })()     function scrollToTop() {      let top = window.pageYOffset      const duration = 320      const step = top / (duration / (1000 / 60)) >> 0      const fn = () => {        if (top >= 0) {          top -= step          window.scrollTo(0, top)          fn.rafTimer = window.requestAnimationFrame(fn)        } else {          window.scrollTo(0, 0)          window.cancelAnimationFrame(fn.rafTimer)        }      }      fn.rafTimer = window.requestAnimationFrame(fn)    }  </script></head><body><div class="box box1"></div><div class="box box2"></div><div class="box box3"></div><div class="box box4"></div><div class="top" onclick="scrollToTop()"></div></body></html>

锚点定位

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>锚点定位</title>  <style>    .top {      margin: 100px auto;      cursor: pointer;    }     .top1 {      color: #b94a48;    }     .top2 {      color: #fb8c00;    }     .top3 {      color: #669900;    }     .top4 {      color: #c0a16b;    }     .box {      margin: 0 auto;      width: 100%;      height: 5000px;    }     .box1 {      background: #b94a48;    }     .box2 {      background: #fb8c00;    }     .box3 {      background: #669900;    }     .box4 {      background: #c0a16b;    }   </style>  <script>    window.requestAnimationFrame = (function () {      return window.requestAnimationFrame ||        window.webkitRequestAnimationFrame ||        window.mozRequestAnimationFrame ||        function (callback) {          window.setTimeout(callback, 6000 / 60)        }    })()     window.cancelAnimFrame = (function () {      return window.cancelAnimationFrame ||        window.webkitCancelAnimationFrame ||        window.mozCancelAnimationFrame ||        window.oCancelAnimationFrame ||        window.msCancelAnimationFrame ||        function (callback) {          window.clearTimeout(callback)        }    })()     function GoPosition(index) {      let top = 0      let distance = document.getElementById(index).offsetTop      const duration = 320      const step = distance / (duration / (1000 / 60)) >> 0      const fn = () => {        if (distance >= top) {          top += step          window.scrollTo(0, top)          fn.rafTimer = window.requestAnimationFrame(fn)        } else {          window.cancelAnimationFrame(fn.rafTimer)        }      }      fn.rafTimer = window.requestAnimationFrame(fn)    }   </script></head><body><div class="top top1" onclick="goPosition('box1')">跳到第一个</div><div class="top top2" onclick="goPosition('box2')">跳到第二个</div><div class="top top3" onclick="goPosition('box3')">跳到第三个</div><div class="top top4" onclick="goPosition('box4')">跳到第四个</div><div id="box1" class="box box1"></div><div id="box2" class="box box2"></div><div id="box3" class="box box3"></div><div id="box4" class="box box4"></div></body></html>

网上技术大牛针对浏览器兼容封装源码:

// Http://paulirish.com/2011/requestanimationframe-for-smart-animating/// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel // MIT license (function() {    var lastTime = 0;    var vendors = ['ms', 'moz', 'webkit', 'o'];    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']                                   || window[vendors[x]+'CancelRequestAnimationFrame'];    }      if (!window.requestAnimationFrame)        window.requestAnimationFrame = function(callback, element) {            var currTime = new Date().getTime();            var timeToCall = Math.max(0, 16 - (currTime - lastTime));            var id = window.setTimeout(function() { callback(currTime + timeToCall); },              timeToCall);            lastTime = currTime + timeToCall;            return id;        };      if (!window.cancelAnimationFrame)        window.cancelAnimationFrame = function(id) {            clearTimeout(id);        };}());

感谢各位的阅读,以上就是“JS怎么使用window.requestAnimationFrame()实现逐帧动画”的内容了,经过本文的学习后,相信大家对JS怎么使用window.requestAnimationFrame()实现逐帧动画这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: JS怎么使用window.requestAnimationFrame()实现逐帧动画

本文链接: https://www.lsjlt.com/news/341644.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS使用window.requestAnimationFrame()实现逐帧动画
    window.requestAnimationFrame() 方法告诉浏览器您希望执行动画,并请求浏览器调用指定的函数在下一次重绘之前更新动画。该方法使用一个回调函数作为参数,这个回...
    99+
    2024-04-02
  • JS怎么使用window.requestAnimationFrame()实现逐帧动画
    这篇文章主要讲解了“JS怎么使用window.requestAnimationFrame()实现逐帧动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS怎么使用window.request...
    99+
    2023-07-02
  • CSS3 中怎么利用animation实现逐帧动画效果
    本篇文章给大家分享的是有关CSS3 中怎么利用animation实现逐帧动画效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。animatio...
    99+
    2024-04-02
  • css3中怎么利用animation实现逐帧动画效果
    css3中怎么利用animation实现逐帧动画效果,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。常见用法::hover{&n...
    99+
    2024-04-02
  • 如何使用CSS制作文字实现逐帧动画
    这篇文章主要介绍了如何使用CSS制作文字实现逐帧动画,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法步骤HTML部分1、创建html定义一...
    99+
    2024-04-02
  • iOS如何实现逐帧动画做loading视图
    这篇文章给大家分享的是有关iOS如何实现逐帧动画做loading视图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下我封装了一个可复用的loading视图组件,用于按照一定周期逐帧播放加载动画。代码如下...
    99+
    2023-06-15
  • WPF怎么实现关键帧动画
    本篇内容介绍了“WPF怎么实现关键帧动画”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动画与关键帧的区别普通动画WPF基础动画当中, 我们熟...
    99+
    2023-06-29
  • Vue3之怎么使用js实现动画
    这篇“Vue3之怎么使用js实现动画”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue3之怎么使用js实现动画”文章吧。概...
    99+
    2023-07-05
  • 怎么使用js实现动画效果
    这篇文章主要介绍“怎么使用js实现动画效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用js实现动画效果”文章能帮助大家解决问题。1.动画原理      &nb...
    99+
    2023-07-05
  • 如何用CSS3实现帧动画
    本文小编为大家详细介绍“如何用CSS3实现帧动画”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何用CSS3实现帧动画”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。代码:定义一...
    99+
    2024-04-02
  • 怎么使用CSS实现图片帧动画与曲线运动
    这篇文章将为大家详细讲解有关怎么使用CSS实现图片帧动画与曲线运动,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。css是什么意思css是一种用来表现HTML或XML等文件样式的计算机语言,主要是用来设计网...
    99+
    2023-06-08
  • js实现一个逐步递增的数字动画
    目录背景实现类似滚轮的效果,容器固定,数字向上滚动利用两个元素实现滚动利用H5的requestAnimationFrame()API实现数字逐步递增的动画效果计时器对比request...
    99+
    2024-04-02
  • 使用jQuery怎么实现动画
    小编今天带大家了解使用jQuery怎么实现动画,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“使用j...
    99+
    2024-04-02
  • Vue3之使用js实现动画示例解析
    目录概述实例解析总结概述 动画的实现其实不仅可以使用CSS的方式实现,而且还可以使用js的方式实现,二者有啥区别呢?CSS更加注重动画的展现,性能更好,而js的方式性能稍微差点,但...
    99+
    2023-05-14
    Vue3使用js实现动画 Vue3 js实现动画
  • js定时器怎么实现动画效果
    这篇文章将为大家详细讲解有关js定时器怎么实现动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.向下滑动<!DOCTYPE html> &l...
    99+
    2024-04-02
  • JavaScript动画原理之如何使用js进行动画效果的实现
    目录前言1.动画原理2.动画函数的封装3.给不同元素添加定时器4.缓动动画原理5.给动画添加回调函数6.动画函数的使用写在最后前言 动画对于我们来说都不陌生,css里面就有很多动画,...
    99+
    2023-05-14
    js动画效果有哪些 js动画效果代码案例 javascript动画教程
  • 怎么在Android应用中实现一个加载数据帧动画效果
    这期内容当中小编将会给大家带来有关怎么在Android应用中实现一个加载数据帧动画效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。实现步骤:1、xml布局<&#63;xml version...
    99+
    2023-05-31
    android roi
  • 怎么使用react native reanimated实现动画
    这篇“怎么使用react native reanimated实现动画”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2023-07-05
  • 怎么使用Framer Motion实现React动画
    这篇文章主要介绍“怎么使用Framer Motion实现React动画”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Framer Motion实现React动画”文章能帮...
    99+
    2023-07-04
  • 怎么使用vue实现动画效果
    这篇文章主要介绍了怎么使用vue实现动画效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用vue实现动画效果文章都会有所收获,下面我们一起来看看吧。Vue封装的过度与动画1.作用在插入,更新,移除DOM...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作