函数的节流与函数的防抖

1,概念:函数防抖
1,定义
在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时;典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时。
,2,实现原理
函数防抖的基本思想是设置一个定时器,在指定时间间隔内运行代码时清楚上一次的定时器,并设置另一个定时器,知道函数请求停止并超过时间间隔才会执行。
3,使用场景
文本框输入搜索(连续输入时避免多次请求接口)

防抖函数的封装

export function debounce(fn = () => {}, delay = 200, now = false) {
  let __timer__ = null

  return function(...rest) {
    //清除上一次延时器
    __timer__ && clearTimeout(__timer__)

    if (now) fn.apply(this, rest)

    __timer__ = setTimeout(() => {
      fn.apply(this, rest)
    }, delay)
  }
}

函数的节流
1,定义
规定在一个单位时间内,只能触发一次函数,如果这个单位时间内触发多次函数,只有一次生效; 典型的案例就是鼠标不断点击触发,规定在n秒内多次点击只有一次生效。
,2,实现原理
其原理是用时间戳来判断是否已到回调该执行时间,记录上次执行的时间戳,然后每次触发 scroll 事件执行回调,回调中判断当前时间戳距离上次执行时间戳的间隔是否已经到达 规定时间段,如果是,则执行,并更新上次执行的时间戳,
3,使用场景
resize、scroll、mousemove等事件触发监听
节流函数的封装

//节流
export function throttle(fn = () => {}, period = 200) {
  let _laseTime = null
  let _timer = null
  return function(...args) {
    const _nowTime = +new Date()
    _timer && clearTimeout(_timer)
    if (_laseTime && _nowTime - _laseTime > period) {
      fn.apply(this, args)
      _laseTime = _nowTime
    } else {
      _timer = setTimeout(fn.bind(this, args), period)
    }
  }
}

详解看
写的很好

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值