• js防抖节流


    一、防抖debounce(多次触发 只执行最后一次)

    • 作用:高频率触发的事件,在指定的单位时间内,只响应最后一次,如果在指定的时间内再次触发,则重新计算时间
    • 类似于回城8秒,如果回城中被打断,再次回城需要再等8秒
    • 应用场景:搜索提示;搜索时不断输入,用防抖来节约请求资源
    <body>
      <input type="text">
      <script>
        function debounce(callback, delay) {
          let timer
          return function () {  // 闭包
            clearTimeout(timer)  // 清除上次的timer
            timer = setTimeout(() => {
              callback(...arguments)
            }, delay)
          }
        }
        function say_hello(str) {  // 事件触发函数
          console.log(str);
        }
        const new_say_hello = debounce(say_hello, 1000)  // 重构事件触发函数
        const input = document.querySelector('input')
        input.addEventListener('keyup', e => {
          new_say_hello(e.target.value)
        })
    
      </script>
    </body>
    

    二、防抖throttle(规定时间内 只触发一次)

    • 作用:限定事件在一定时间内只能执行一次
    • 节流类似于平A,受攻速的限制
    • 应用场景:监听滚动条滚动加载数据,即边滚动边加载;鼠标多次点击只触发少次
    <body>
      <button>点击</button>
      <script>
        function throttle(callback, delay) {
          let timer // 节流阀
          return function () {  // 闭包
            if (!timer) {
              timer = setTimeout(() => {
                callback(...arguments)
                timer = null  // 回调函数执行完放开节流阀
              }, delay)
            }
          }
        }
        function say_hello(str) {
          console.log(str);
        }
        const new_say_hello = throttle(say_hello, 1000)
        const btn = document.querySelector('button')
        btn.addEventListener('click', e => {
          new_say_hello('点击了')
        })
      </script>
    </body>
    

    参考一
    参考二

  • 相关阅读:
    ES6数组的扩展--Array.from()和Array.of()
    前端面试中的各种方法实现
    理解 JavaScript call()/apply()/bind()
    【前端面试】变量和类型计算
    Kubernetes1.3新特性:支持GPU
    撸了一个微信小程序项目
    微信开发(调用各种接口)
    Android 神兵利器之通过解析网页获取到的API数据合集,可拿来就用
    Kubernetes1.4正式发布
    Kubernetes1.4即将发布
  • 原文地址:https://www.cnblogs.com/zhanxinbing/p/16302859.html
Copyright © 2020-2023  润新知