返回介绍

节流

发布于 2024-09-07 20:34:42 字数 1106 浏览 0 评论 0 收藏 0

原理

如果事件持续触发,在指定时间内,只执行一次事件

代码实现

时间戳方式

// 时间戳方式
/**
使用时间戳,当触发事件的时候,我们取出当前的时间戳,然后减去之前的时间戳(最一开始值设为 0 ),
如果大于设置的时间周期,就执行函数,然后更新时间戳为当前的时间戳,如果小于,就不执行。
*/
function throttle(callback, wait) {
  let start = 0
  return function(...args) {
    const now = +new Date()
    if(now-start >= wait ) {
      callback.call(this,args)
      start = now
    }

  }
}
//使用
const cb = throttle(function(e){
  console.log(this)
},1000)
document.body.addEventListener('mousemove',()=>{
  cb.call({name:'南玖'})
},1000)
// {name: '南玖'}

定时器方式

// 定时器方式
/**
 * 
 * 当触发事件的时候,我们设置一个定时器,再触发事件的时候,如果定时器存在,就不执行,
 * 直到定时器执行,然后执行函数,清空定时器。
 */
function throttle(callback, wait) {
  let timer
  return function(...args) {
    if(!timer) {
      timer = setTimeout(()=>{
        timer = null
        callback.call(this,args)
      },wait)
    }
  }
}

const cb = throttle(function(e){
  console.log(this)
},1000)
document.body.addEventListener('mousemove',()=>{
  cb.call({name:'南玖'})
},1000)
// {name: '南玖'}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文