防抖&节流

防抖:

        防抖就是单位时间内,频繁触发某个事件,只执行最后一次。

        一般用于搜索框的关键词

 实现方法:

        利用lodash.js第三方库中的方法

   _.debounce(函数对象, 延时毫秒值):将原函数进行防抖处理后返回

let newFn = _.debounce(oldFn, 114514)

  手写防抖:原理就是利用一个定时器,但是在定时器前面清除定时器,这样就可以做到把前面触发的定时器清除,执行最后一个创建的定时器

// 需求:鼠标在box中移动,移动停止后i++并显示数字在box页面上

let i = 0

function fn() {
   i++
   this.innerHTML = i
}

function debounce(fn, time) {
   let timerId
   return function() {
       clearTimeout(timerId)
       timerId = setTimeout(() => {
           fn.call(this)
       }, time)
   }
}

document.querySelector('.box').addEventListener('mousemove', debounce(fn, 300))

节流:

        节流:就是单位时间内,频繁触发某个事件。只执行一次。

        一般用于页面滚动监听事件、防止用户频繁点击

实现方法:
        利用lodash.js第三方库中的方法

  _.throttle(函数对象, 延时毫秒值):将原函数进行防抖处理后返回

let newFn = _.throttle(oldFn, 114514)

  手写节流:原理就是利用一个定时器,再创建一个变量作为锁,每次创建定时器都需要判断锁为true,当创建完后就把锁改成false,定时器执行完后才会把锁改成true

// 需求:鼠标在box中移动,单位时间内移动只会执行一次i++,并显示数字在box页面上

let i = 0

function fn() {
   i++
   this.innerHTML = i
}

function throttle(fn, time) {
   let timerId = 0
   return function() {
       if (!timerId) {
           timerId = setTimeout(() => {
               fn.call(this)
               timerId = 0
           }, time)
       }
   }
}

document.querySelector('.box').addEventListener('mousemove', throttle(fn, 1000))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值