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

性能优化之防抖

方法1:利用lodash库提供的防抖来处理

方法2:手写一个防抖函数来处理

需求:鼠标在盒子上移动,鼠标停止500ms之后,里面的数字才会变化+1

方法一:利用lodash库实现防抖

<!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><style>.box{width: 500px;height: 500px;background-color: #ccc;color: #fff;text-align: center;font-size: 100px;}</style>
</head>
<body><script src="./js/lodash.min.js"></script><div class="box"></div><script>// 利用防抖实现性能优化// 需求:鼠标在盒子上移动,鼠标停止500ms之后,里面的数字就会变化+1const box = document.querySelector('.box')let i = 1function mouseMove(){box.innerHTML = i++}// mousemove鼠标移动事件// 鼠标一移动就500ms后就触发debounce事件,i就++// _.debounce语法(fun,时间)box.addEventListener('mousemove', _.debounce(mouseMove,500))</script>
</body>
</html>

方法二: 手写一个防抖函数来处理

思路:

        核心是利用setTimeout定时器来实现

        1声明定时器变量

        2每次事件触发时都要先判断是否有定时器,如果有先清除以前的定时器

        3如果没有定时器则开启定时器存入到定时器变量里面

        4定时器里面写函数调用

<!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><style>.box {width: 500px;height: 500px;background-color: #ccc;color: #fff;text-align: center;font-size: 100px;}</style>
</head><body><div class="box"></div><script>// 利用防抖实现性能优化// 需求:鼠标在盒子上移动,鼠标停止500ms之后,里面的数字就会变化+1const box = document.querySelector('.box')let i = 1function mouseMove() {box.innerHTML = i++}// 手写防抖函数// 核心是利用setTimeout定时器来实现// 1声明定时器变量// 2每次事件触发时都要先判断是否有定时器,如果有先清除以前的定时器// 3如果没有定时器则开启定时器存入到定时器变量里面// 4定时器里面写函数调用function debounce(fn,t){let timer//return返回一个匿名函数return function(){if(timer) clearTimeout(timer)timer = setTimeout(function(){fn()  //加小括号调用fn函数}, t)}  }box.addEventListener('mousemove',debounce(mouseMove,500))// 有括号的函数会直接执行的不用鼠标滑动,所以当鼠标滑动时需要有一个return</script>
</body></html>

http://www.lryc.cn/news/174763.html

相关文章:

  • postgresql用户和角色
  • 设计模式之备忘录模式
  • 大数据Flink(八十八):Interval Join(时间区间 Join)
  • 数字IC笔试千题解--判断题篇(五)
  • Kubernetes(k8s)上搭建一主两从的mysql8集群
  • MySQL备份与恢复
  • 【RTOS学习】单片机中的C语言
  • 确知波束形成matlab仿真
  • 并发编程相关面试题
  • Cpp/Qt-day050921Qt
  • 视频汇聚/视频云存储/视频监控管理平台EasyCVR分发rtsp流起播慢优化步骤详解
  • ElementUI之登陆+注册->饿了吗完成用户登录界面搭建,axios之get请求,axios之post请求,跨域,注册界面
  • 2023华为杯研究生数学建模研赛E题出血脑卒中完整论文(含28个详细预处理数据及结果表格)
  • Java中的继承是什么?
  • Python - flask后端开发笔记
  • Flutter实现PS钢笔工具,实现高精度抠图的效果。
  • 苏宁滑块验证
  • c语言。。。
  • vue-cli创建项目、vue项目目录结(运行vue项目)、ES6导入导出语法、vue项目编写规范
  • QT读取DLL加载算法
  • HTTPX-用于Python的下一代HTTP客户端
  • [LLM+AIGC] 01.应用篇之中文ChatGPT初探及利用ChatGPT润色论文对比浅析(文心一言 | 讯飞星火)
  • OCR -- 文本检测
  • 【系统架构】软件可靠性基础知识
  • 相机Camera
  • 洛谷P8815:逻辑表达式 ← CSP-J 2022 复赛第3题
  • ElementUI实现登录注册+axios全局配置+CORS跨域
  • Vue 07 Vue中的数据代理
  • Foxit PDF SDK Windows 9.1 Crack
  • UG NX二次开发(C++)-采用NXOpen方法计算体的质心