JS中手撕防抖函数和节流函数

news/2024/11/8 11:59:37/

1.防抖函数

1.1定义

说明:在一定时间内,频繁执行事件,只执行最后一次函数。(英雄联盟回城)

1.2步骤:

  1. 声明定时器函数
  2. 判断是否有定时器函数,如果有定时器函数的话就清除定时器。。
  3. 如果没有定时器函数的话,就开启定时器函数。
  4. 定时器函数放入执行的函数。

1.3代码

1.3.1原生JS实现

<!DOCTYPE html>
<html lang="zh">
<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>手撕防抖函数</title><script src="./lodash.min.js"></script><style>.box {width: 200px;height: 200px;background-color: pink;font-size: 20px;line-height: 200px;text-align: center;}</style>
</head>
<body><div class="box"></div><script>//   获取盒子const box = document.querySelector(".box")// 说明变量let i = 0function mouseAdd() {box.innerHTML = i += 1}// 防抖函数:在规定的时间,频繁点击,只执行最后一次function debounce1(fn, time) {// 声明一个定时器变量let timer;// 返回一个匿名函数return function () {// 如果有定时器那么就清除if (timer) clearTimeout(timer)// 如果没有就创建一个定时器timer = setTimeout(function () {// 在定时器函数中执行要执行的函数fn();}, time)}}
box.addEventListener("mousemove", debounce1(mouseAdd, 1000))</script>
</body>
</html>

 1.3.2引入第三方库lodash

<!DOCTYPE html>
<html lang="zh">
<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>手撕防抖函数</title><script src="./lodash.min.js"></script><style>.box {width: 200px;height: 200px;background-color: pink;font-size: 20px;line-height: 200px;text-align: center;}</style>
</head>
<body><div class="box"></div><script>//   获取盒子const box = document.querySelector(".box")// 说明变量let i = 0function mouseAdd() {box.innerHTML = i += 1}box.addEventListener("mousemove", _.debounce(mouseAdd, 1000))</script>
</body>
</html>

1.3.3效果图

2.节流函数

2.1定义

说明:在一定时间内,频繁执行事件,只执行一次函数(英雄联盟中的技能冷却)

2.2步骤:

  1. 声明定时器函数,并将定时器赋值为空。
  2. 没有定时器函数,就开启定时器函数。
  3. 定时器函数放入执行的函数,并将定时器变量赋值为空。

2.3代码

2.3.1原生JS实现

<!DOCTYPE html>
<html lang="zh">
<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>手撕防抖函数</title><script src="./lodash.min.js"></script><style>.box {width: 200px;height: 200px;background-color: pink;font-size: 20px;line-height: 200px;text-align: center;margin: 0 auto;}</style>
</head>
<body><div class="box"></div><script>const box = document.querySelector(".box")let i = 0function moveAdd() {box.innerHTML = i += 1}//节流函数:在一定时间内,频繁执行事件,只执行一次函数。function throttle(fn, time) {let timer=nullreturn function () {if (!timer) {timer = setTimeout(function () {fn();timer = null}, time)}}}box.addEventListener("mousemove", throttle(moveAdd, 1000))</script>
</body>
</html>

2.3.2引入第三方lodash库

<!DOCTYPE html>
<html lang="zh">
<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>手撕防抖函数</title><script src="./lodash.min.js"></script><style>.box {width: 200px;height: 200px;background-color: pink;font-size: 20px;line-height: 200px;text-align: center;margin: 0 auto;}</style>
</head>
<body><div class="box"></div><script>const box = document.querySelector(".box")let i = 0function moveAdd() {box.innerHTML = i += 1}box.addEventListener("mousemove",_.throttle(moveAdd,1000))</script>
</body>
</html>

2.3.3效果图


http://www.ppmy.cn/news/110006.html

相关文章

Java程序设计入门教程-- if 条件语句

目录 单分支选择语句&#xff08;if&#xff09; 双分支选择语句&#xff08;if…else&#xff09; 嵌套if语句 单分支选择语句&#xff08;if&#xff09; 情形 当判断条件满足时&#xff0c;执行语句体S&#xff0c;而不满足则什么都不做。 格式 if &#xff08;条件判断表…

ubuntu 离线安装gcc-10 ( 系统 20.0.4 focal )

sudo lsb_release -a 显示系统版本 根据系统版本信息在 http://packages.ubuntu.com/precise/amd64/g/filelist 找到对应的系统安装内容 https://packages.ubuntu.com/focal/devel/ http://archive.ubuntu.com/ubuntu/pool/main/ 这个是文件下载内容地址 在页面 ht…

一文读懂TSC时钟: (x86_64/arm64)实现介绍和编程使用

Linux(16)之Time Stamp Counter Author&#xff1a;Once Day Date&#xff1a;2023年5月30日 参考文档: 4. Environment Abstraction Layer — Data Plane Development Kit 23.03.0 documentation (dpdk.org)DPDK: lib/eal/include/generic/rte_cycles.h File Reference测量…

PHY TO PHY调试分享总结(惨痛的采坑经历)

PHY与网络变压器使用说明 1、PHY芯片分为电压型和电流型&#xff0c;具体参考具体手册说明和具体的demo&#xff0c;区分方式 变压器中心抽头接线方式&#xff0c;变压器中心抽头直接电容接地的是电压型&#xff0c;而电流型需要提供一个偏置电压&#xff0c;所以中心抽头要接…

Python之数据可视化和高等数学基于Python的实现

Python之数据可视化 matplotlib系统介绍 https://blog.csdn.net/m0_57385293/article/details/123229485 https://www.jianshu.com/p/63ba161f0102 高等数学基于Python的实现 pyqtgraph PyQtGraph被大量应用于Qt GUI平台&#xff08;通过PyQt或PySide&#xff09;&#xff0c…

[强网杯 2019]随便注 1【SQL注入】解析过程

1.首先启动并访问靶机&#xff0c;有一个输入框&#xff0c;随便输入1 or 1 1&#xff0c;测试一下是否存在sql注入。 2.提交后提示error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syn…

高并发线程池实现_Nginx 线程池剖析

高并发线程池实现_Nginx 线程池剖析 并发基本概念处理事件过程“阻塞”怎么办?多线程能解决问题?解决方案 → 线程池技术线程池实现考虑线程池实现核心组件Nginx线程池代码解析并发基本概念 所谓并发编程是指在在同一台计算机上“同时”处理多个任务。并发是在同一实体上的多…

C语言结构体大小

C语言结构体求大小 引入一个知识&#xff0c;我这里会写的比较少&#xff0c;大家可以打开自己的课本查看。 1、结构体变量的首地址&#xff0c;必须是结构体变量中的“最大基本数据类型成员所占字节数”的整数倍。&#xff08;对齐&#xff09; 2、结构体变量中的每个成员相…