函数的防抖与节流

介绍

使用场景中有一个submit按钮,用于提交信息,如果不做防抖处理,有时候点快了可能会提交两次,如果使用disable去处理,一个地方还好,多个地方都需要这么处理怎么办,就可以用到防抖和节流了,诸如此类的场景在onmousemove,resize等场景均可以用到。

<button id="submit">点击</button>
<script>
let sub=document.getElementById('submit');
sub.addEventListener('click',submit,false)
function submit(){
  console.log('提交')
}
<script/>

防抖函数

函数防抖,第一次点击后需要等待 timer 秒才能继续触发事件,每次点击都会重新计时

sub.addEventListener('click',debounce(submit,1000,true),false)

function debounce(fn,timer,triggleNow){
	var t=null
	return function(){
	    if(t){
	        clearTimeout(t)
	    }
	    if(triggleNow){
	        var firstClick=!t
	        if(firstClick){
	            fn.apply(this,arguments)
	        }
	        t = setTimeout(()=>{
	            t=null;
	        },timer)
	
	    }else{
	        t=setTimeout(()=>{
	            fn.apply(this,arguments)
	            },timer)
	    }
	}
}

节流函数

函数节流,在第一次触发事件后需要间隔 timer 秒才能触发下一次,每次点击不会重新计时

sub.addEventListener('click',debounce(throttle,1000),false)

function throttle(fn,timer){
     let begin=0;
     return function(){
        let now=new Date().getTime()
        if(now-begin>timer){
            fn.apply(this,arguments)
           begin=now
        }
                
     }
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值