三分钟学会防抖和节流

三分钟学会防抖和节流

在实际项目开发中,一直有一个问题困扰着很多开发人员,就是用户的频繁点击问题,总所周知,在真实项目中,用户每点击一次就会向后台发送一条请求,如果不加以限制,将会造成数据库的瘫痪问题,为了防止这种事情发生,因此就出现防抖和节流。

一.防抖(debounce)
概念:当用户点击某个事件行为时,我们设置一个定时器,每点击一次,定时器将会在n秒后(自己设置)延迟执行这个事件,如果用户不断点击,定时器就会自动清零并且重新计时,换句话说,这个用户如果足够有毅力,可以和这个事件耗到两败俱伤,不是你停电关机,就是我手指头抽筋,这就是所谓的防抖,接下来请看小栗子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #box{
            width: 200px;
            height: 200px;
            background: pink;
        }
    </style>
</head>
<body>
    <button id="btn">按钮</button>
    <div id="box">16465</div>
    <script>
        let btn=document.getElementById('btn');
        /*防抖:用在高频触发的事件,N秒内就执行一次,如果
        n秒内在次触发,那么会重新计算时间*/
        function debounce(func,wait=1000){
            let timer=null;
            return function(){
                clearTimeout(timer);
                timer=setTimeout(()=>{
                    func.call(this);
                    console.log(this);
                    timer=null;
                },wait);
            }
        }
        function fn(){
            console.log(2,this);
        }
        let lazy=debounce(fn,2000);
        btn.onclick=lazy;
    </script>
</body>
</html>

如果当你发现点击之后时两秒后才能看到结果就说明这个结果是对的;

二.节流(throttle)
概念:也是使用在高频触发事件,但在n秒内执行一次,会稀释函数的执行次数,其实现主要依靠时间戳和定时器实现;
在这里插入图片描述
如果当鼠标从粉盒子划出过了两秒才执行就说明成功了。
编码不易,求大佬评论鼓励!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值