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

专题 | 防抖和节流

防抖:单位时间内,频繁触发事件,只执行最后一次

          场景:搜索框搜索输入(利用定时器,每次触发先清掉以前的定时器,从新开始)

节流:单位时间内,频繁触发事件,只执行一次

         场景:高频事件 快速点击,鼠标滑动、resize事件、scroll事件(利用定时器,等定时器执行完毕,才开启定时器,不用打断)

                  一般用lodash库,利用里面的debounce(防抖)和throttle(节流)来做

【前端面试题:防抖与节流(二)】 https://www.bilibili.com/video/BV1ig411u7LG/?share_source=copy_web&vd_source=c1fe9c75396fdc6f65b56d15f5eb00b3

防抖

防抖:用户触发事件过于频繁,只需要最后一次事件的操作

案例一:输入框触发过于频繁 

只想要暴富两字,前面哪些过程不想要把它输出来

 

 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><input type="text"><script>let inp = document.querySelector("input");inp.oninput = function(){console.log(this.value);}</script></body>
</html>

案例二:用定时器解决触发频繁问题

差不多解决了,可以在调整一下时间更完美

 

 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><input type="text"><script>// 防抖方法一  好烦啊,我也不知道是哪些部分不懂,明明拆开我全晓得,烦躁let inp = document.querySelector("input");// t代表的是用户触发的次数let t = null;inp.oninput = function(){if(t !== null){clearTimeout(t);}t = setTimeout(()=>{console.log(this.value);},500)}</script></body>
</html>

案例三:用debounce解决触发频繁问题

案例二的代码据说是一团垃圾,因为业务逻辑和什么混在一起了,所以下面用闭包封的更好些

 

 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><input type="text"><script>// 防抖方法二 debouncelet inp = document.querySelector("input");let t = null;inp.oninput = debounce(function(){console.log(this.value);},500)function debounce(fn,delay){return function(){if(t !== null){clearTimeout(t);}t = setTimeout(()=>{fn.call(this);},delay)}}</script></body>
</html>

节流

节流就是控制执行次数

案例一:执行次数过多 

 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>body{height:800px;}</style></head><body><script>window.onscroll = function(){console.log("123");}</script></body>
</html>

案例二:定时器节流

 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>body{height:800px;}</style></head><body><script>// 节流方法一 定时器let flag = true;window.onscroll = function(){if(flag){setTimeout(()=>{console.log("111");flag = true;},500)}flag = false;}</script></body>
</html>

案例三:throttle节流

 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>body{height:800px;}</style></head><body><script>// 节流方法二:throttlelet flag = true;window.onscroll = throttle(function(){console.log("111");},500)function throttle(fn,delay){let flag = true;return function(){if(flag){setTimeout(()=>{fn.call(this)flag = true},delay)}flag = false;}}</script></body>
</html>

【手写函数防抖和节流】 https://www.bilibili.com/video/BV1pQ4y1M71e/?p=3&share_source=copy_web&vd_source=c1fe9c75396fdc6f65b56d15f5eb00b3

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

相关文章:

  • C++入门:重载运算符和重载函数
  • conda 新建虚拟环境 等等
  • 【C++:STL之栈和队列 | 模拟实现 | 优先级队列 】
  • 基于SpringBoot+Vue的疫苗预约管理系统(Java项目)
  • 华为OD机试 - 计算网络信号(Python),真题含思路
  • 【Spring】注解实现IOC操作,你理解了吗?
  • 微搭低代码从入门到精通01-总体介绍
  • 类的继承
  • 应用场景一:西门子PLC通过桥接器连接MQTT服务器
  • 计算机组成原理(四)
  • 状态机设计举例
  • Kubernetes1.25中Redis单机和集群部署实例二
  • 【STM32】【HAL库】遥控关灯0 概述
  • C语言学习笔记(三): 选择结构程序设计
  • 图----无向图
  • 【C++1】函数重载,类和对象,引用,/string类,vector容器,类继承和多态,/socket,进程信号
  • JetpackCompose从入门到实战学习笔记8—ConstraintLayout的简单使用
  • Spring Boot 快速入门(绝对经典)
  • golang context上下文
  • Linux---Linux是什么
  • C语言(Tgmath.h库(C99),exit和atexit)
  • LeetCode 刷题系列 -- 739. 每日温度
  • 如何生成毕业论文的目录和创建模板
  • 新来的23岁软件测试员上来秀了波操作,把几个老员工看傻了
  • Window10开放某个端口
  • 进阶7 分页查询
  • 利用升序定时器链表处理非活动连接
  • MySQL 开发规范
  • 【C语言进阶】预处理与程序环境
  • 【Docker知识】将环境变量传递到容器