前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js之防抖、节流函数

js之防抖、节流函数

作者头像
且陶陶
发布2023-04-12 15:52:19
5990
发布2023-04-12 15:52:19
举报
文章被收录于专栏:Triciaの小世界

防抖和节流是前端中常见的两个概念,通常用于前端的优化。

防抖: 就是指触发事件后在n秒内函数只能执行一次,如果在n秒内又触发了事件,则会重新计算函数执行时间。(延时器 重新计时) 节流: 就是指连续触发事件但是在设定的一段时间内中只执行一次函数。(定时器)

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
  <input type="text" class="ipt">
  <button class="btn">按钮</button>
  <script>

    // 防抖:出发时间后,延迟一段时间,再执行回调,如果在此期间,事件又被触发,则重新计时
    // 核心:延时器   重新计时
    let timerId = null  // 声明一个延时器
    document.querySelector('.ipt').addEventListener('input', function (){
      let text = this.value
      clearTimeout(timerId) // 用户再输入,清掉延时器,重新开启一个新的
      timerId = setTimeout(() => {
        axios.get('http://www.liulongbin.top:3006/api/sug').then(res => {
          console.log(res);
        })
      }, 1000)
    })


    // 节流:单位时间内,频繁触发同一个操作,只触发一次。(定时器实现)
    // 当触发事件的时候,如果没有设置执行回调函数的定时器,就创建一个。当定时器中的回调函数被执行的时候, 将指向定时器引用的timeout设置为null,那么下一此再执行时,又会重新触发并设置一个定时器。
    let timer = null
    document.querySelector('.btn').addEventListener('click', function () {
      if(!timer) {
        timer = setTimeout(() => {
          timer = null
          axios.get('http://www.liulongbin.top:3006/api/sug').then(res => {
          console.log(res)
          })
        },1000)
      }
    })


  </script>
</body>
</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档