当前位置: 首页 > news >正文

js:requestAnimationFrame的使用

基础版:inner在warp里面从上往下移动,无限循环

index.html

<!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>:root {--w: 5px;}* {margin: 0;padding: 0;}.wrap {width: 500px;height: 500px;border: 1px solid #ccc;position: relative;overflow: hidden;margin: 30px auto;border-radius: var(--w);}.inner {border-radius: var(--w);background: #000;width: 100px;height: 100px;position: absolute;top: 0;left: 50%;transform: translateX(-50%);}</style>
</head><body><!-- 我想使用requestAnimationFrame来写一个动画帧 --><!-- 写一个div里面的一个小的div,从上往下面移动的吧,时间是4s --><div class="wrap"><div id="inner" class="inner"></div></div><script>const inner = document.getElementById('inner');let startTime;const step = (timestamp) => {if (startTime === undefined) {//第一次执行的时候,给startTime赋值startTime = timestamp}//计算过去了的时间const elapsed = timestamp - startTime;//计算当前的一个进度 假设总的时间是 4000毫秒const progress = Math.min(elapsed / 4000, 1)// 计算curPosition 总距离是500pxconst curPosition = progress * 500;inner.style.transform = `translate(-50%, ${curPosition}px)`;//当超出500时,重新开始if (progress >= 1) {startTime = undefined;}requestAnimationFrame(step)}requestAnimationFrame(step)</script></body></html>

进阶:将总时长和最大距离提取出来,当做参数来传递,控制inner的速度

<!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>:root {--w: 5px;}* {margin: 0;padding: 0;}.wrap {width: 500px;height: 500px;border: 1px solid #ccc;position: relative;overflow: hidden;margin: 30px auto;border-radius: var(--w);}.inner {border-radius: var(--w);background: #000;width: 100px;height: 100px;position: absolute;top: 0;left: 50%;transform: translateX(-50%);}</style>
</head><body><!-- 我想使用requestAnimationFrame来写一个动画帧 --><!-- 写一个div里面的一个小的div,从上往下面移动的吧,时间是4s --><div class="wrap"><div id="inner" class="inner"></div></div><script>const inner = document.getElementById('inner');let startTime;//将参数timestamp,总时长4s和maxDistance 500px提出来const step = (timestamp, duration = 4, maxDistance = 500) => {if (startTime === undefined) {//第一次执行的时候,给startTime赋值startTime = timestamp}//计算过去了的时间const elapsed = timestamp - startTime;//计算当前的一个进度 const progress = Math.min(elapsed / (duration * 1000), 1)// 计算curPosition const curPosition = progress * maxDistance;inner.style.transform = `translate(-50%, ${curPosition}px)`;//当超出maxDistance时,重新开始if (progress >= 1) {startTime = undefined;}requestAnimationFrame((ts) => step(ts, duration, maxDistance))}requestAnimationFrame((timestamp) => step(timestamp, 16))</script></body></html>

http://www.dtcms.com/a/574000.html

相关文章:

  • 【JUnit实战3_29】第十八章:REST API 接口测试(上)——RESTful 风格的后端 API 的搭建
  • 回调函数的作用与举例(Python版)
  • 克旗网站制作5229998建设银行网站会员
  • 洛阳市政建设网站网站建设中 html免费
  • 自己创建网站怎么赚钱青海省住房建设厅网站首页
  • MiniEngine学习笔记 : DescriptorHeap
  • 智能合约与智能合约开发交互详解
  • 我想出租做房 请问哪个网站好些泰安最新通告今天
  • 下一代CDN安全体系:融合加速、抗攻击与业务智能
  • 光纤传输器与网络延长器2合1技术解析:
  • OpenHarmony开发实践-鸿蒙napi开发实践
  • Redis识别缓存与数据库数据的不一致性以及识别热Key教程
  • 网站运营培训机构网站建设是做什么的
  • 商丘网站建设专业现状网站首页布局
  • 28.DHCP
  • Linux基础指令-Linux学习笔记(1)
  • 可以推广网站市网站制作
  • STM32TIM定时器PWM1模式与PWM2模式配置
  • 阿勒泰建设局网站北京模板网站建设费用
  • 上传OSS直传
  • 网站正在建设中页面 英文翻译网络网站建设电话
  • 外企渣打内推
  • TGRS 即插即用 | 超越传统U-Net!ASCNet融合小波变换与全局注意力,重新定义图像修复范式
  • 一线城市网站建设费用高wordpress调用id数据
  • BOD5快速测定仪:环境水质监测的高效解决方案
  • 【仓颉纪元】仓颉性能优化深度实战:5 天让应用提速 300%
  • 全网营销型网站建设公司wordpress 个人soho
  • Python 正则表达式实战 + 详解:从匹配QQ邮箱到掌握核心语法
  • 五度易链产业大脑技术拆解:AI + 大数据 + 云计算如何构建产业链数字基础设施?
  • 湖南如何做网络营销seo哪家好