防抖和节流

1-防抖:指触发事件后,在n秒内函数只执行一次,若在n秒内再次触发则重新计算防抖debounce一般常用解决办法有两种

  • 延迟执行,操作结束后到指定时间才执行
function debounce(func,wait) {
    let timeout
    return function() {
        if(timeout) clearTimeOut(timeout)
        timeout = setTimeout(function(){
            func.apply(this)
        },wait)
    }
}
  • 立即执行,操作完立即执行函数,过指定时间后才能再次发送请求
function debounce(func,wait) {
    let timeout
    return function() {
        if(timeout) clearTimeOut(timeout)
        let callNow = !timeout
        timeout = setTimeout(function(){
            timeout = null
        },wait)
        if(callNow) func.apply(this)
    }
}

2-节流:连续发生的事件,在n秒内只执行一次函数

  • 定时器,固定的时间去发生请求
function thorttle(func,wait) {
    let timeout
    return function() {
        if(!timeout) {
            timeout = setTimeout(()=>{
                timeout = null
                func.apply(this)
            },wait)
        }
    }
}
  • 利用时间戳
function thorttle(func,wait) {
    let prev = 0
    return function() {
        let now = Date.now()
        if(now-prev>wait){
            func.apply(this)
            prev = now
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值