首页 > 其他分享 >JS 防抖节流

JS 防抖节流

时间:2025-01-11 17:33:47浏览次数:3  
标签:function 防抖 节流 JS 任务 let input playing

JS 防抖节流

在 JS 中, 滚动事件、鼠标移动 、 input 等事件 都会产生 任务频繁执行的问题, 针对此情况、可以采用 防抖节流手段 进行处理

防抖解决思路: 在最后一刻 单位时间内 延迟执行。
每次执行任务 会对 任务 进行延迟 操作,
当下一次 执行任务的 时候, 会 先停止 上一次的延迟任务, 重新开始延迟任务。

节流解决思路 : 每次 执行延迟 任务 都需要 在 上一次 任务 结束后 再执行。

  • 防抖
function debounce(fn, delay=500) {
	// 定义一个 变量,用来存储延迟任务的句柄
	let playing = false ; 
	return function() {
		let args = arguments ;
		// 如果 playing 有值, 停止上一次的延迟
		if (playing) clearInterval(playing) ;
		// 重新开始延迟任务
		playing = setTimeout(() => {
			// 执行任务 、调用 fn 
		    fn.apply(this, args);
			playing = false ;	
		} , delay)
	}
}

// 定义任务函数、并将其交给debounce函数
function getCompany() {
	console.log("正在查询公司名称");
}

// 创建一个 防抖任务
let delayTask =  debounce(getCompany, 200);
// 绑定 input 事件、并触发 防抖任务。
document.querySelector("input").addEventListener("input", delayTask)
  • 节流
function throttle(fn, delay = 500){
	let playing = false ;
	
	return function() {
		let args = arguments ;
		if (!playing) {
			playing = setTimeout(()=> {
				// 调用 任务函数、处理任务 
				fn.apply(this, args) ;
				// 任务完成后, 将 playing 设置为 false
				playing = false ;
			},  delay);
		}
	}
}

function test() {
	console.log("我是节流代码")
}

let  throttleTask = throttle(test) ;

// 绑定事件 
document.querySelector("input").addEventListener("input", throttleTask)

标签:function,防抖,节流,JS,任务,let,input,playing
From: https://blog.csdn.net/panpanpan233/article/details/145079952

相关文章

  • JS DOM详解
    DOM(文档对象模型)文档对象模型主要的职责是处理网页中的标签(元素)获取标签(元素)对象document.getElementById(“id”)根据标签的ID属性值获取指定的元素、该方法只能返回一个标签。document.getElementsByTagName(“tag”):根据标签名获取所对应的多......
  • 详解JS函数
    函数Function定义方式普通函数JS函数最多只能返回一个数据!,如果函数没有使用return返回数据、相当于returnundefined!函数的参数支持必传参数、默认参数和不定项参数(不定项参数使用三个点表示、且类型是数组),和python相比,不支持关键字参数。fu......
  • html css网页制作成品——HTML+CSS+js绝味鸭脖网页设计(5页)附源码
      目录   一、......
  • node.js基于的大学生心理咨询系统程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于大学生心理咨询系统的研究,现有研究主要集中在心理咨询的理论、方法以及效果评估等方面,专门针对大学生心理咨询系统设计的研究较少 1。目前虽然已有......
  • node.js基于大数据的在线教育平台课程推荐与学习行为分析研究程序+论文 可用于毕业设
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于在线教育平台的研究,现有研究主要集中在平台的构建、教学模式等方面。在大数据应用于在线教育方面,多以整体的教学效果分析为主,专门针对基于大数据的......
  • node.js基于的路驰汽车美容系统程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于汽车美容系统的研究,现有研究主要以通用的汽车服务系统为主,专门针对路驰汽车美容服务的研究较少。在国内外,汽车服务相关的研究成果多集中在大型汽车......
  • node.js基于web的社区管理系统程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于社区管理系统的研究,现有研究主要以传统的管理模式或特定功能的社区管理为主,专门针对将用户、缴费通知、缴费信息、闲置物品、互帮互助等功能整合在......
  • node.js毕设高校毕业生实习管理系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于高校毕业生实习管理系统的研究,现有研究主要集中在传统管理模式下的个别环节优化,如实习计划制定或实习成绩评定等方面。专门针对构建全面、整合学生......
  • node.js毕设高校毕业生信息采集系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于高校毕业生信息采集系统的研究,现有研究主要集中在教育管理系统的宏观层面,专门针对高校毕业生信息采集系统这一特定领域的研究较少。在国内外,已有的......
  • 怎样判断某个js对象是否存在循环引用?
    在JavaScript中,判断一个对象是否存在循环引用并不直接,因为JavaScript本身并没有提供这样的API。但是,你可以通过实现一个递归函数来遍历对象并检查是否存在循环引用。以下是一个简单的示例,该函数可以检测一个对象是否包含循环引用:functionhasCircularReference(obj,visited=n......