防抖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 版权协议,转载请附上原文出处链接和本声明。