防抖

83 阅读1分钟

概念:顾名思义,防止短时间内重复发送请求给服务器造成压力 实现原理:多次触发发送机制只发送最后一次的请求 举例:input框 js监听input框用户输入值发生变化,发送请求

let t = null

ipt.oninput = function {
       console.log(this.value) // 发送请求
       if(t !== null) {
           clearTimeout(t) // 如果有定时器,拦截全部,只执行最后一次的定时器事件
        }
       t = setTimeout(() => {
       console.log(this.value)
       }, 500
       ) 
}

封装为一个函数块

let ipt = document.querySelector('input')
		ipt.oninput = deShake(function () {
			console.log(this.value)
		}, 1000)

		function deShake(fn, delay) {
			let t = null
			return function () {
				if (t !== null) {
					clearTimeout(t)
				}
				t = setTimeout(() => {
					fn.call(this)
				}, delay)
			}
		}