防抖&节流

什么是防抖(⭐⭐⭐)

防抖策略debounce)是当事件被触发后,延迟 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。

防抖的应用场景:如淘宝搜索框,用户在输入框连续搜索一行字的时候可以通过防抖策略,知道用户把搜索内容全部打出才触发执行请求,这样可以有效减少请求的次数,节约请求资源

好处:用户在多次触发某事件的情况下只会执行最后一次     

步骤:

         1. 定义一个防抖动的 timer延时器并置空

         2.获取页面中input  DOM元素并绑定回车事件

         3.先清除延时器,确保连续多次触发但只执行最后一次定时器

示例代码:

<body>
    <!-- 用户要进行输入的input框 -->
    <input type="text" name="" id="inp">
    <script>
        // 第一步:定义一个防抖动的timer延时器并置空
        var timer = null;
        var count = 0;  //count用于统计被触发的次数
        // 获取页面中input  DOM元素并绑定回车事件
        document.querySelector('#inp').addEventListener('keyup', function() {
            // 先清除定时器,确保连续多次触发但只执行最后一次定时器
            if (timer) clearInterval(timer)
            timer = setTimeout(function() {
                count++
                console.log('我被触发了' + count + '次');
            }, 1000)
        })
    </script>
</body>

效果图:

           

什么是节流(⭐⭐⭐)

节流策略throttle)可以减少一段时间内事件的触发频率

节流的应用场景

① 鼠标连续不断地触发某事件(如点击),只在单位时间内只触发一次;

② 懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算的频率,而不必去浪费 CPU 资源;

 效果: 图片跟随鼠标移动

步骤:

         1. 定义一个timer节流阀

         2.定义一个延时器

         3.如果节流阀不为空设置了鼠标跟随效果后,清空timer节流阀,方便下次开启延时器

         4.判断节流阀是否为空,如果不为空(上次的代码还没执行完)就return等待执行完毕

示例代码:

<body>
    <img src="angel.gif" alt="" id="angel">
    <script>
        // 1.定义一个timer节流阀
        var timer = null;
        $(document).on('mousemove', function(e) {
            // 3.判断节流阀是否为空,如果不为空则上次的代码还没执行完
            if (timer) {
                return
            }
            // 2.定义一个延时器
            timer = setTimeout(function() {
                $('#angel').css({
                        'left': e.pageX - 40 + 'px',
                        'top': e.pageY - 40 + 'px'
                    })
                    // 2.如果节流阀不为空设置了鼠标跟随效果后,清空timer节流阀,方便下次开启延时器
                timer = null;
            }, 16)

        })
    </script>
</body>

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值