js防抖和节流

  • Post author:
  • Post category:其他




防抖debounce



概念

当持续触发事件时,一定时间段内没有再触发事件,事件处理函数执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始计时。

将几次操作合并为一此操作进行。原理是维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置。这样一来,只有最后一次操作能被触发。



实现

/**
 * 一个防抖debounce函数,参数为一个函数和等待时间,返回一个防抖功能的函数
 * @param fn 应用防抖功能的函数
 * @param wait 触发防抖函数前的等待时间
 */
export const debounce = (fn: Function, wait: number = 200) => {
	let timeout = null
	return (...args) => {
		if(timeout!==null) {
			clearTimeout(timeout)
		}
		timeout = setTimeout(()=>fn(...args),wait)
	}
}



节流(throttle)



概念

当持续触发事件时,保证一定时间段内只触发1次处理函数。

使得一定时间内只触发一次函数。原理是通过判断是否到达一定时间来触发函数。



实现

/**
 * 一个节流throttle函数,参数为一个函数和一个等待时间
 * @param fn 应用节流功能的函数
 * @param wait 触发节流函数前的等待时间
 */
export const throttle = (fn:Function, wait:number = 200) => {
	let timeout = null
	return (...args) => {
		if (timeout === null) {
			timeout = setTimeout(()=>{
				fn(...args)
				clearTimeout(timeout)
			},wait)
		}
	}
}



版权声明:本文为qq_33437985原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。