防抖与节流

防抖

当某个事件触发时,等待一段时间再执行函数。如果在这段时间内事件再次被触发,那么就重新计时,换句话说,防抖可以确保函数在事件结束后才被执行,避免了多次触发。

应用场景:

  1. 搜索框输入:用户在输入时,防止每个字符都发起一次请求。
  2. 窗口调整:在窗口大小变化时,避免频繁触发事件。
function debounce(func, delay) {let timeout;return function (...args) {clearTimeout(timeout);  // 每次事件触发时,清除上一次的延时timeout = setTimeout(() => {func.apply(this, args);  // 在延时后执行函数}, delay);};
}// 示例:用户输入时防抖,避免频繁调用
const searchInput = document.querySelector('#search');
const handleSearch = debounce(function () {console.log('搜索:', searchInput.value);
}, 500); // 延时 500ms 执行searchInput.addEventListener('input', handleSearch);

节流

在固定时间间隔内,确保事件触发的函数最多只执行一次,换句话说,节流可以确保事件触发时,不管多频繁,只有在一定的时间间隔内才执行一次函数。

应用场景:

  1. 滚动事件:比如监听页面滚动,避免因每次滚动触发高频率的事件。
  2. 按钮点击:控制按钮在短时间内不能被多次点击,避免重复提交。
function throttle(func, delay) {let lastTime = 0;return function (...args) {const now = new Date().getTime();if (now - lastTime > delay) {  // 确保每隔一定时间才执行一次func.apply(this, args);lastTime = now;}};
}// 示例:滚动时节流,避免频繁触发事件
const handleScroll = throttle(function () {console.log('滚动位置:', window.scrollY);
}, 1000); // 每 1000ms 执行一次window.addEventListener('scroll', handleScroll);

总结

特性/对比防抖(Debounce)节流(Throttle)
事件触发频率等待停止触发后再执行在固定时间间隔内执行一次
主要用途用于高频事件,如输入框、搜索等用于持续事件,如滚动、窗口大小调整等
执行时机最后一次触发后延迟执行固定间隔内执行一次
触发条件触发事件停止后执行固定时间间隔内触发一次

案例

效果

代码

<template><div><input type="text" id="search" v-model="searchValue" placeholder="请输入搜索内容"><div id="scrollDiv" style="height: 3000px; background-color: lightgray;"></div></div>
</template><script setup>
import { ref, onMounted, onUnmounted } from 'vue';// 防抖函数
function debounce (func, delay) {let timeout;return function (...args) {clearTimeout(timeout);timeout = setTimeout(() => {func.apply(this, args);}, delay);};
}// 节流函数
function throttle (func, delay) {let lastTime = 0;return function (...args) {const now = new Date().getTime();if (now - lastTime > delay) {func.apply(this, args);lastTime = now;}};
}// 搜索输入框的值
const searchValue = ref('');// 防抖示例
const searchHandler = debounce(() => {console.log('搜索内容:', searchValue.value);
}, 500);// 节流示例
const scrollHandler = throttle(() => {console.log('当前滚动位置:', window.scrollY);
}, 1000);onMounted(() => {const searchInput = document.querySelector('#search');searchInput.addEventListener('input', searchHandler);window.addEventListener('scroll', scrollHandler);
});onUnmounted(() => {const searchInput = document.querySelector('#search');searchInput.removeEventListener('input', searchHandler);window.removeEventListener('scroll', scrollHandler);
});
</script><style></style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/33412.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DKMS介绍

文章目录 一、安装DKMS二、DKMS使用示例1. 源码准备2. 增加dkms.conf3. 添加模块4. 编译模块5. 安装模块 三、基于DKMS的deb安装包制作 Dynamic Kernel Module Support&#xff08;DKMS)是一个用于动态管理内核模块的框架&#xff0c;由DELL创建的项目&#xff0c;它可以帮我们…

【LeetCode】498.对角线遍历

无论何时何地&#xff0c;我都认为对于一道编程题&#xff0c;思考解法的时间用于是实际动手解决问题的2倍&#xff01;如果敲键盘编码需要5min&#xff0c;那么思考解法的过程至少就需要10分钟。 1. 题目 2. 思想 其实这就是一道模拟题&#xff0c;难度中等。做这种题的关键就…

用 NotePad++ 运行 Java 程序

安装包 网盘链接 下载得到的安装包: 安装步骤 双击安装包开始安装. 安装完成: 配置编码 用 NotePad 写 Java 程序时, 需要设置编码. 在 设置, 首选项, 新建 中进行设置, 可以对每一个新建的文件起作用. 之前写的文件不起作用. 在文件名处右键, 可以快速打开 CMD 窗口, 且路…

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间 函数原型参数说明返回值示例代码注意事项libssh2_session_set_timeout 是 libssh2 库中的一个函数,用于设置 SSH 会话的超时时间。这对于防止网络延迟或连接中断导致的长时间挂起非常有用。 函数原型 int libssh2_se…

如何用注册机破解Reflexive游戏

相信有许多小朋友&#xff08;像我以前一样&#xff09;已经迫不及待地准备准备对浩瀚的、像三星堆一般的Reflexive游戏合集进行考古挖掘工作了。不巧的是&#xff0c;打开游戏之后发现常常提示要付费才能解锁完整版。 一、下载注册机与破解文件 首先&#xff0c;在我的永硕网…

红外跟随避障模块详解

在智能车、机器人和自动化等领域避障技术是确保安全和高效运行的关键。红外避障模块作为一种常见的避障解决方案&#xff0c;因其非接触、响应速度快和抗干扰能力强等优点而备受青睐。本文将详细介绍红外避障模块的特点、工作原理、以及应用案例&#xff0c;帮助您更好地了解这…

【0x3D】HCI_Remote_Host_Supported_Features_Notification事件详解

目录 一、事件概述 二、事件格式及参数说明 2.1. HCI_Remote_Host_Supported_Features_Notification事件格式 2.2. BD_ADDR 2.3. Remote_Host_Supported_Features 三、事件作用 3.1. 设备特性沟通与理解 3.2. 功能协商与性能优化 3.3. 设备管理与配置更新 四、应用场…

开发中使用UML的流程_08 PIM-4:定义操作及方法

目录 1、序列图概述 2、序列图调用方式 3、创建消息与销毁消息 4、几项建议 1、序列图概述 在PIM-4中&#xff0c;系统分析员可以用序列图来表达&#xff0c;系统内部一群对象合力完成某一个系统用例时&#xff0c;执行期间的交互情形。之后&#xff0c;序列图可能通过设计…

Unity 设计模式-策略模式(Strategy Pattern)详解

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;定义了一系列算法&#xff0c;并将每种算法封装到独立的类中&#xff0c;使得它们可以互相替换。策略模式让算法可以在不影响客户端的情况下独立变化&#xff0c;客户端通过与这些策略对象进…

空间异质性数据分析不再复杂:地理加权回归分析、主成分分析、判别分析、分位数回归分析、线性回归等

目录 专题一 地理加权回归下的描述性统计学 专题二 地理加权主成分分析 专题三 地理加权回归 专题四 高级回归与回归之外 更多了解 在自然和社会科学领域有大量与地理或空间有关的数据&#xff0c;这一类数据一般具有严重的空间异质性&#xff0c;而通常的统计学方法并不能…

【spring mvc】全局处理请求体和响应体

目录 说明实现效果逻辑图 实现步骤创建公共处理的请求和响应的类api接口测试前端请求响应结果 扩展Response响应格式实体ResponseCode 响应状态码RSA工具类 RequestBodyAdvice 介绍使用场景 ResponseBodyAdvice 介绍使用场景 说明 由于项目中需要进行加密传输数据提高项目安全…

【计算机网络】实验8:聚合了不存在的网络导致的路由环路问题

实验 8&#xff1a;聚合了不存在的网络导致的路由环路问题 一、 实验目的 聚合了不存在的网络导致的路由环路问题。 网络故障导致的路由环路问题。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、聚合了不存在的网络导致的路由环路问题 (1) 第一步&am…

【Leetcode】189.轮转数组

题目链接&#xff1a; 189.轮转数组 题目描述&#xff1a; 解题思路&#xff1a; 要想实现数组元素向右轮转k个位置&#xff0c;可是将数组三次反转来实现 以 nums [1,2,3,4,5,6,7], k 3 为例&#xff0c;最终要得到[5,6,7,1,2,3,4]: 第一次反转&#xff1a;将整个数组反转…

设计模式c++(二)

文章目录 十三、门面模式_Facade十四、代理模式_Proxy十五、适配器_Adapter十六、中介者_Mediator十七、状态模式_State十八、备忘录_Memento十九、组合模式_Composite二十、迭代器_Iterator二十一、职责链_Chain Of Resposibility二十二、命令模式_Command二十三、访问器_Vist…

shell 3 脚本参数传递与数字运算(泷羽sec)

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面&#xff0c;了解网络安全领域的见闻&#xff0c;了…

jvm优化策略都有哪些

1. 堆内存&#xff08;Heap Memory&#xff09;优化&#xff1a; • 调整堆大小&#xff1a;通过-Xms和-Xmx参数设置JVM初始堆大小和最大堆大小&#xff0c;以确保JVM在启动时拥有足够的内存&#xff0c;并在需要时能够扩展到最大容量。 • 堆分区调整&#xff1a;调整年轻代&a…

使用ensp搭建内外互通,使用路由跨不同vlan通信。

1.网络拓扑图 2.规则 &#xff08;1&#xff09;允许 &#xff08;自己&#xff09;ping通内外网&#xff0c;内外网随便一个pc就可以. &#xff08;2&#xff09; 允许&#xff08;电信&#xff09;ping通内外网&#xff0c;内外网随便一个pc就可以 &#xff08;时间问题不做…

Flink 中维表 Join 的实现方式与优化策略

目录 一、维表介绍 二、预加载维表 &#xff08;一&#xff09;实现方式 &#xff08;二&#xff09;优缺点 &#xff08;三&#xff09;改进尝试与局限 三、使用本地缓存&#xff08;HashMap&#xff09;加载维表 &#xff08;一&#xff09;实现方式 第一版 第二版 …

详解八大排序(六)------(三路划分,自省排序,归并排序外排序)

文章目录 1. 快排之三路划分1. 1 三路划分的诞生由来1. 2 三路划分的具体思路1. 3 代码实现 2. 快排之自省排序2. 1 自省排序的目的2. 2 自省排序的思路2. 3 自省排序的实现代码 3. 归并排序外排序3. 1 外排序介绍3. 2 归并排序外排序的思路3. 3 归并排序的实现代码 1. 快排之三…

【Redis篇】 List 列表

在 Redis 中&#xff0c;List 是一种非常常见的数据类型&#xff0c;用于表示一个有序的字符串集合。与传统的链表结构类似&#xff0c;Redis 的 List 支持在两端进行高效的插入和删除操作&#xff0c;因此非常适合实现队列&#xff08;Queue&#xff09;和栈&#xff08;Stack…