首页 > 其他分享 >requestAnimationFrame优化动画

requestAnimationFrame优化动画

时间:2023-07-30 19:34:50浏览次数:43  
标签:动画 cancelAnimationFrame 一帧 requestAnimationFrame window square 执行 优化

  1. requestAnimationFrame优化动画
  • 总结:
  • requestAnimationFrame与setInterval的区别
  • setInterval是在任务队列里执行的,也就是说 上一帧没有执行完下一帧不可能执行。
  • 而requestAnimationFrame是在差异队列里执行的,也就是说没有延迟。
  • requestAnimationFrame可以准时执行每一帧
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    #main {
      position: absolute;
      width: 100px;
      height: 100px;
      background-color: #abcdef;
    }
  </style>
</head>
<body>
  <div id="main"></div>
  <script>
    // requestAnimationFrame优化动画(兼容性极差)
    // requestAnimationFrame与setInterval的区别
    //    setInterval是在任务队列里执行的,也就是说 上一帧没有执行完下一帧不可能执行。
    //    而requestAnimationFrame是在差异队列里执行的,也就是说没有延迟。
    // requestAnimationFrame可以准时执行每一帧
    // cancelAnimationFrame相当于clearTimeout

    // 处理兼容
    window.requestAnimationFrame = ((callback)=> {
      return window.requestAnimationFrame || function (id) {
        setTimeout(callback, 1000 / 60)
      }
    })();

    window.cancelAnimationFrame = (()=> {
      return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function (id) {
        window.clearTimeout(id);
      }
    })()

    let timer = null;
    const move = ()=> {
      console.log(1)
      const square = document.getElementById("main");
      if(square.offsetLeft > 700) {
        cancelAnimationFrame(timer);
        return;
      };
      square.style.left = `${square.offsetLeft + 20}px`;
      timer = requestAnimationFrame(move);
    }
  </script>
</body>
</html>

标签:动画,cancelAnimationFrame,一帧,requestAnimationFrame,window,square,执行,优化
From: https://www.cnblogs.com/bingquan1/p/17591857.html

相关文章

  • 【笔记】DP 优化(WIP)
    7.30DP凸相关决策单调性、斜率优化、凸、四边形不等式,都是凸相关。前置知识四边形不等式:交叉小于包含。\(l_1<l_2<r_1<r_2\tow(l_1,r_1)+w(l_2,r_2)\leqw(l_1,r_2)+w(l_2,r_1)\)。区间包含单调性:包含区间值单调。\(l_1<l_2<r_2<l_1\tow(l_1,r_1)\geqw(l_2,r_2)\)。满足......
  • 索引优化
    联合索引第一个字段如果是范围查询则不会走索引如果第一个查询条件用范围查询,那么MySQL会以为你查询的表数据比较多,那么它就会进行全表扫描而不进行索引,,但是如果第一个查询条件是主键范围查询的话,它依旧会走索引,不过在开发中应该不需要进行主键范围查询。主键范围查询EXPLAINS......
  • js代码优化
    //案例:functionpreviewWeek(i){switch(i){case1:return'星期一'break;case2:return'星期二'break;case3:return'星期三'break;......
  • Mysql数据库中数据量特别大,读取特别慢,已经做了索引,怎么优化
    当MySQL数据库中的数据量特别大,读取操作变得特别慢,即使已经添加了索引,仍然需要进一步优化。下面是一些建议以及示例代码来优化这种情况:使用合适的索引:确保为频繁查询的列添加了合适的索引。可以使用EXPLAIN语句来分析查询的执行计划,检查是否正确使用了索引。示例代码:sqlCopycodeE......
  • css 动画无限滚动
    创建一个外层容器(loop-wrap)和一个包含CSS标签的容器(loop)。CSS标签使用tag类样式化,并带有文本"#CSS"。使用@keyframesloop动画规则来实现标签的水平滚动效果。动画从初始位置滚动到左边50%的位置,并持续3秒后无限循环。通过将fade类应用于一个空白的div,在loop-wrap容器上创建了一个......
  • 性能优化之详解各种指标
    前言上篇文章最后提到了我们可以通过performance的一些属性对性能做统计,我们会发现performance对象下有非常多的属性,远不止上篇文章提到的DOMContentLoaded与Load这两个事件。或许你在浏览器控制台见过它们这些身影:DCL、LCP、FP、FCP、L这里的DCL与L就是我们上篇文章介绍的DOMConte......
  • 性能优化之window.onload
    前言最近在做一些性能优化相关的工作,相信大家在工作过程中也会遇到一些性能优化相关的场景,这对于前端开发者来讲是一项加分技能。为了我们的用户在使用我们的产品时能够有一个非常好的体验,我们需要对页面进行诊断优化。在行业中,我们的页面P90在两秒内算是达标,超过这个时间那么你就......
  • 【Matlab】基于粒子群优化算法优化BP神经网络的数据分类预测
    【Matlab】基于粒子群优化算法优化BP神经网络的数据分类预测(Excel可直接替换数据)1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码5.1fun.m5.2main.m6.完整代码6.1fun.m6.2main.m7.运行结果1.模型原理“基于粒子群优化算法优化BP神经网络的数据分类预测”是一种结合了粒......
  • 前端性能优化策略:加速网页加载时间的关键技巧
    引言:在当今互联网时代,网页加载速度是提供出色用户体验的关键因素之一。快速加载的网页不仅可以吸引更多用户,还可以提高转化率和搜索引擎排名。因此,前端性能优化成为每个开发人员和网站所有者都应该关注的重要议题。本文将介绍一些关键的前端性能优化策略,帮助您加速网页加载时间并......
  • 项目优化调优
    啊 一个用户充值时会有多种优惠,默认给用户最高的,为了提升这方面的速度,采用countDownLatch每种优惠计算一下最后金额,返回最低金额。40ms降到20ms  立减的时候,qps较高,还是用多线程降低rt,但是并没有降,load急速上升。拆分表,按业务拆分 春节档玩法多,某个值到了才能参加活......