防抖和节流
防抖
- 防抖是指在一定的时间内再次触发此事件,会清空上次的事件重新开始,如果制定的时间内没有再次触发,那么这个事件才会执行
- 例如: input输入信息,不可能每次按下都发起一个ajax请求,可以等一段时间内不输入了之后在发起请求
节流
- 节流是指在一定的时间同一事件只会触发一次,只有超过了这个时间才会再次出发
- 例如: 验证码60秒内不可以再次触发(实际开发肯定是使用禁止,但是原理和验证码一样)
原生JS实现节流防抖
防抖函数
的作用就是控制函数在一定时间内的执行次数。防抖意味着 N 秒内函数只会被执行一次(最后一次),如果 N 秒内再次被触发,则重新计算延迟时间。
export function _debounce(fn,delay){
let delay = delay || 200;
let timer
return function(){
let th = this;
let args = arguments;
if(timer){
clearTimeout(timer)
}
timer = setTimeout(()=>{
timer = null;
fn.apply(th,args)
},delay)
}
}
节流函数
的作用是规定一个单位时间,在这个单位时间内最多只能触发一次函数执行,如果这个单位时间内多次触发函数,只能有一次生效。
export function _throttle(fn,interval){
let last;
let timer;
let interval = interval||200;
return function(){
let th = this;
let args = arguments;
let now += new Date();
if(last&&now-last<interval){
clearTimeout(timer);
timer = setTimeout(()=>{
last = now;
fn.apply(th,args)
},interval)
}else{
last = now;
fn.apply(th,args)
}
}
}
Vue中使用节流防抖
新建一个工具函数utils.js
let isStop = true
let timer = null
//防抖函数
export function debounce (fn){
return function(){
clearTimeout(timer)
let timr = setTimeout(()=>{
fn.apply(this,arguments)
},2000)
}
}
//节流函数
export function throttle(fn){
if(!isStop) return
isStop = false
setTimeout(()=>{
fn.apply(this,arguments)
isStop = true
},2000)
}
在main.js中引入
import * as utils from './utils.js'
Vue.use(utils)
Vue.prototype.$utils = utils
使用
this.$utils.debounce(function(){
})()
版权声明:本文为weixin_52263256原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。