使用requestAnimationFrame实现进度条

简介: 使用requestAnimationFrame实现进度条

背景


在了解宏任务的时候了解到requestAnimationFrame,cancelAnimationFrame,然后做了实践。


方法


  • requestAnimationFrame(callback)

即屏幕刷新率,执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画,回调函数执行次数通常是每秒60次。


  • cancelAnimationFrame

取消一个先前通过调用window.requestAnimationFrame()方法添加到计划中的动画帧请求

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <style>
    .content {
      width: 100%;
    }
    .progress {
      width: 0;
      height: 20px;
      background-color: aqua;
      border-radius: 10%;
    }
    .stop,
    .reset {
      width: 150px;
      outline: none;
      height: 40px;
    }
    .stop {
      background: #ff0;
    }
    .reset {
      background: #654565;
    }
  </style>
  <div class="content">
    <div class="progress">0%</div>
    <button class="stop">停止</button>
    <button class="reset">重置</button>
  </div>
  <script>
    let dom = document.getElementsByClassName('progress')[0];
    let stop = document.getElementsByClassName('stop')[0];
    let reset = document.getElementsByClassName('reset')[0];
    let num = 0;
    var timer;
    function run() {
      num += 1;
      dom.style.width = num + '%';
      dom.innerHTML = num + '%';
      if (num < 100) {
        timer = requestAnimationFrame(run)
      }
    }
    requestAnimationFrame(run);
    stop.addEventListener('click', function () {
      cancelAnimationFrame(timer)
    })
    reset.addEventListener('click', function () {
      num = 0;
      requestAnimationFrame(run)
    })
  </script>
</body>
</html>


目录
相关文章
|
6月前
3d自动轮播代码
3d自动轮播代码
26 4
3d自动轮播代码
|
6月前
|
前端开发 JavaScript API
2022年了!还在用定时器实现动画?赶紧试试requestAnimationFrame吧!
2022年了!还在用定时器实现动画?赶紧试试requestAnimationFrame吧!
115 0
|
JavaScript 前端开发
jquery通过setInterval实现按钮的轮播点击效果
jquery通过setInterval实现按钮的轮播点击效果
71 0
jquery通过setInterval实现按钮的轮播点击效果
|
前端开发
CSS动画篇之404动画
CSS动画篇之404动画
149 0
|
存储 文件存储 云计算
不瞒了,我们和追光动画有一个《杨戬》!
不瞒了,我们和追光动画有一个《杨戬》!
189 0
|
JavaScript 前端开发
【jQuery动画】停止动画、淡入淡出、自定义动画
动画队列中所有动画都是按照顺序执行的,默认只有当前的一个动画执行完毕,才会执行后面的动画。为此,jQuery提供了stop()方法用于停止动画效果。通过此方法,可以让动画队列后面的动画提前执行。
An动画优化之遮罩层动画
An动画优化之遮罩层动画
261 0
An动画优化之遮罩层动画
|
JavaScript 前端开发 异构计算
requestAnimationFrame 和 setInterval 在动画上应用的区别
定义 requestAnimationFrame 帧动画,又叫 RAF,在 requestAnimationFrame 中执行的事件叫 RAF 回调 setInterval 引用 MDN 的定义 区别
|
前端开发
动画
动画
139 0
|
前端开发
2、CSS动画——拳皇动画实现
2、CSS动画——拳皇动画实现
123 0
2、CSS动画——拳皇动画实现