js的防抖和节流的封装

 防抖(debounce)

  • 防抖:在规定的事件内触发一次,开启一个定时器,延迟某个时间执行(500ms),如果在这500ms内,有再次触发事件,重新计数

  • 防抖的目的:让高频发的事件,在规定时间内,触发1次

  • 实现思路: 开一个定时器,事件延迟某个时间(30ms),如果在这30ms内再次触发整个事件,重新开始计数

  • 基础实现

    
    防抖:事件发生的时候开启定时器,开始计数(30),如果在计数范围内又触发了事件,那就重新开始计数
    var timer;
    function change() {
        //判断,如果之前已经开启了定时器,就清除掉之前的
        if (timer) { clearTimeout(timer) }
        timer = setTimeout(function () {
            fun();
        }, 30);
    }

  • 封装

    function debounce(fun,wait) { //fun:事件处理函数, wait:延迟时间
        var timer; //维护全局纯净,借助闭包来实现
        return function () {
            if (timer) {  //timer有值为真,这个事件已经触发了一次,重新开始计数
                clearTimeout(timer); 
            }
            timer = setTimeout(function () {
                fun();
            }, wait);
        }
    }

节流

  • 防抖和节流的区别

    • 防抖:高频率触发事件,只执行一次

    • 节流:高频率触发事件,按一定的频率执行,隔一会执行一次

    • 封装

    • function throttle(fun, wait) {
          var timer;  //开   timer=undefined
          return function () {
              if (!timer) { //判断timer是否有值(当前是否已经开启了定时器) ,
                  timer = setTimeout(function () { //关
                      fun();
                      timer = undefined; //开
                  }, wait)
              }
          }     
      }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于UniApp的防抖节流封装,可以通过以下步骤进行实现: 1. 防抖(Debounce):在一定时间内只执行一次函数。通常用于限制事件的触发频率,防止频繁触发导致性能问题。 ```javascript // 防抖封装 export function debounce(fn, delay) { let timer = null; return function() { const context = this; const args = arguments; clearTimeout(timer); timer = setTimeout(function() { fn.apply(context, args); }, delay); }; } ``` 使用示例: ```javascript import { debounce } from '@/utils'; // 在某个方法中使用防抖 export default { methods: { handleClick: debounce(function() { // 执行需要防抖的逻辑 }, 300) } } ``` 2. 节流(Throttle):在一定时间内执行多次函数,但每次执行间隔不小于指定的时间间隔。通常用于限制事件的触发频率,保证一定的执行效果。 ```javascript // 节流封装 export function throttle(fn, delay) { let timer = null; let lastTime = 0; return function() { const context = this; const args = arguments; const now = Date.now(); if (now - lastTime > delay) { clearTimeout(timer); timer = null; lastTime = now; fn.apply(context, args); } else if (!timer) { timer = setTimeout(function() { timer = null; lastTime = Date.now(); fn.apply(context, args); }, delay); } }; } ``` 使用示例: ```javascript import { throttle } from '@/utils'; // 在某个方法中使用节流 export default { methods: { handleScroll: throttle(function() { // 执行需要节流的逻辑 }, 300) } } ``` 通过以上封装,可以在UniApp中方便地使用防抖节流功能来优化事件处理的效率和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值