关于js的防抖和节流

啥是防抖啥是节流??
在JS中有时候我们会不经意的去频繁地触发一些事件,比如说onmouseover和onscroll,我明明只想触发一次,但是他好像被触发了n次,想想看,如果我们在这些事件中有发送请求去操纵数据库,那对于后台来说是多么可怕的消耗啊.
而所谓防抖和节流就是用来解决这个问题的

防抖

事件只有在n秒内不被触发才会再次执行
它会有一个执行的时间,规定时间内如果你再次去触发了,那么会重新开始计时,怎么实现呢?

        const inputa = document.getElementById('unDebounce')

        let timeId
        function debounce(content) {
            clearTimeout(timeId)
            timeId = setTimeout(() => {
                console.log('ajax request' + content)
            }, 1000);
        }

        inputa.addEventListener('keyup', (e) => {
            debounce(e.target.value)
        })

实现的原理是, 当你每次去触发事件的时候,都会清理掉上一个计时器,重开一个计时器,如果你的触发时间小于计时器的等待时间,他就一直都不会执行,重新计时

节流

n秒内无论函数被触发多少次,都只执行一次

        const inputb = document.getElementById('throttle')
        
        let last, timerId
        function throttle(content){
            let now = +new Date()
            if(last && now<last+1000){
                clearTimeout(timerId)
                timerId = setTimeout(() => {
                    last = now
                    console.log('ajax request'+content)
                }, 1000);
            }else{
                last = now
                console.log('ajax request'+content)
            }
        }

        inputb.addEventListener('keyup', (e) => {
            throttle(e.target.value)
        })

实现原理是,一定时间内你去触发这个事件,它也是清理上一个计时器,不停的去清理上一个计时器,直到不满足条件去执行else条件里面的打印,最后剩的没有被清除掉的那个计时器也会在单位时间后被打印

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值