Vue2.x-使用防抖以及节流的示例
utils:
//防抖
exportconstdebounce=(func,wait=3000,immediate=true)=>{
lettimeout=null;
returnfunction(){
letcontext=this;
letargs=arguments;
if(timeout)clearTimeout(timeout);
if(immediate){
varcallNow=!timeout;//点击第一次为true时间内点击第二次为false时间结束则重复第一次
timeout=setTimeout(()=>{
timeout=null;
},wait);//定时器ID
if(callNow)func.apply(context,args);
}else{
timeout=setTimeout(function(){
func.apply(context,args);
},wait);
}
};
};
//时间戳方案
exportconstthrottleTime=(fn,wait=2000)=>{
varpre=Date.now();
returnfunction(){
varcontext=this;
varargs=arguments;
varnow=Date.now();
if(now-pre>=wait){
fn.apply(context,args);
pre=Date.now();
}
};
};
//定时器方案
exportconstthrottleSetTimeout=(fn,wait=3000)=>{
vartimer=null;
returnfunction(){
varcontext=this;
varargs=arguments;
if(!timer){
timer=setTimeout(function(){
fn.apply(context,args);
timer=null;
},wait);
}
};
};
vue中使用:
防抖立即执行
防抖不立即执行
节流时间戳方案
节流定时器方案
解释:
防抖:
立即执行版本:immediate为true,则点击第一次就执行,再继续点击则不执行,当wait时间结束后,再点击则生效,也就是只执行第一次。
原理:
点击第一次不存在timeoutID,并且callNow为true,则立即执行目标代码,点击第二次时存在了timeoutID,并且callNow为false,所以不执行目标代码,当wait时间结束后,把timeoutID设为null,则开始重复立即执行逻辑。
不立即执行版:immediate为false,则点击第一次不执行,当wait时间结束后,才生效,也就是无论点击多少次,只执行最后一次点击事件
原理:
使用setTimeout延迟执行事件,如果多次触发,则clearTimeout上次执行的代码,重新开始计时,在计时期间没有触发事件,则执行目标代码。
节流:
连续触发事件时以wait频率执行目标代码。
效果:
以上就是Vue2.x-使用防抖以及节流的示例的详细内容,更多关于vue防抖及节流的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。