1.防抖
防抖的原理就是:你尽管触发事件,但是我一定在事件触发 n 秒后才执行,如果你在一个事件触发的 n 秒内又触发了这个事件,那我就以新的事件的时间为准,n 秒后才执行,总之,就是要等你触发完事件 n 秒内不再触发事件,我才执行
参数说明:
1.fn:需要执行防抖的函数
2.wait:等待的时间间隔
3.immdiate:立刻执行函数,然后等到停止触发n秒后,才可以重新触发执行。如果频繁点击触发事件,会从新计算wait时间,直到不触发事件达到wait时长后才可以重新触发
function debounce(fn,wait,immdiate) {let timeout,result,callnowreturn function() {let context = thislet args = argumentsif(timeout) {clearTimeout(timeout)}if(immdiate) {callnow = !timeouttimeout = setTimeout(function(){timeout = null},wait)if(callnow) {result = fn.apply(context,args)}}else {timeout = setTimeout(function(){result = fn.apply(context,args)},wait)}return result}}
2.节流
节流的原理是:如果持续触发一个事件,每隔一段事件只执行一次事件,目的是为了降低事件触发的次数,按照事先定义的周期去执行.
function throttle(fn,wait) {let context,argslet previous = 0return function() {let now += new Date()context = thisargs = argumentsif(now - previous >wait) {fn.apply(context,args)previous = now}}}
