防抖与节流

利用闭包封装一个防抖函数

<!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>
</head>

<body>
  <input type="text">
  <script>
    // 防抖: 只执行最后一次(回城)
    let ipt = document.querySelector("input");
    // let t = null;
    ipt.oninput = debounce(function () {
      // console.log("Goenitz")
      console.log(this.value);
    }, 500);

    // 利用闭包封装防抖函数
    function debounce(fn, delay) {
      let t = null;// 闭包
      return function () {
        if (t !== null) {
          clearTimeout(t);
        }
        t = setTimeout(() => {
          console.log(this) // 指向input
          fn.call(this);// 利用call将实际的this指向ipt组件
        }, delay)

      }
    }
  </script>
</body>

</html>

利用闭包封装节流函数

<!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>
  <style type="text/css">
    body {
      height: 2000px;
    }
  </style>
</head>

<body>
  <script>

    // 节流:控制执行次数
    window.onscroll = throttle(function () {
      console.log(111)
    }, 500)
    // 利用闭包封装节流方法
    function throttle(fn, delay) {
      let flag = true;
      return function () {
        if (flag) {
          setTimeout(() => {
            fn.call(this) // 利用call将实际的this指向
            flag = true
          }, delay)
        }
        flag = false
      }
    }
  </script>
</body>

</html>
全部评论

相关推荐

不愿透露姓名的神秘牛友
04-30 11:43
春招失败、父母离婚,好像我的人生一团糟,一年来压力大到常常崩溃。不知道能跟谁聊,朋友其实对我非常好,但是她无意中表达出来的家庭幸福都会刺痛到我……和ai聊天,我的未来在更高处,不在楼下,忍不住爆哭😭
youngfa:害,妹妹,我是一个研究生(很上进很想找到好工作的那种),但去年因为生病回家休养错过了秋招(当时对我的冲击也是非常大的),这学期返校来了也是把论文盲审交了后才开始找工作,现在也是一个offer没有,但我就没有像你一样把这个阶段性的事情绑定到人生上,人生不仅很长,也很广阔,先停下来,放松一下哦。不要被外部环境灌输的思维操控了,好好爱自己!
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务