当前位置: 首页 > article >正文

js-18-防抖、节流源码以及如何使用

目录

  • 防抖源码及使用
  • 节流源码及使用
    • 方法一:时间戳
    • 方法二:定时器

防抖源码及使用

  <button class="btn">点击发送消息</button>

  <!-- 防抖:就是要延迟执行,你一直操作触发事件一直不执行处理函数,只有当你停止操作等待多少秒后才执行 -->
  <script>
    function debounce(func, wait) {
      let timer = null

      return function(...args) {
        if(timer) {
          clearInterval(timer)
          timer = null
        }

        timer =  setTimeout(() => {
          func.apply(this, args)
        }, wait)
      }
    }

    function sendMessage(name) {
      console.log(`${name}, i love you`)
    }

    const btn = document.querySelector('.btn')
    const sendMsgDebounce = debounce(sendMessage, 3000)
    btn.addEventListener('click', () => {
      sendMsgDebounce('lisi')
    })

节流源码及使用

方法一:时间戳

  <button class="btn">点击发送消息</button>
  <script>
    // 节流:固定时间内只执行一次

    // 方法一:时间戳
    function throttle(func, wait) {
      let preTime = 0

      return function(...args) {
        if(new Date() - preTime > wait) {
          // 当 n 秒内不重复执行
          func.apply(this, args)
          preTime = new Date()
        }
      }
    }

    function sendMessage(name) {
      console.log(`${name}, i love you`)
    }

    const btn = document.querySelector('.btn')
    const sendMsgDebounce = throttle(sendMessage, 3000)
    btn.addEventListener('click', () => {
      sendMsgDebounce('lisi')
    })
  </script>

方法二:定时器

  <button class="btn">点击发送消息</button>
  <script>
    // 节流:固定时间内只执行一次

    // 方法二:定时器
    function throttle(func, wait) {
      let timer = null
      return function(...args) {
        if(!timer) {
          timer = setTimeout(() => {
            timer = null
            func.apply(this, args)
          }, wait)
        }
      }
    }


    function sendMessage(name) {
      console.log(`${name}, i love you`)
    }

    const btn = document.querySelector('.btn')
    const sendMsgDebounce = throttle(sendMessage, 3000)
    btn.addEventListener('click', () => {
      sendMsgDebounce('lisi')
    })
  </script>

http://www.kler.cn/a/379654.html

相关文章:

  • RV1126-SDK学习之OSD实现原理
  • react18中redux-promise搭配redux-thunk完美简化异步数据操作
  • 【Java知识】java进阶-一个好用的java应用分析工具arthas
  • 【华为HCIP实战课程31(完整版)】中间到中间系统协议IS-IS路由汇总详解,网络工程师
  • SpringKafka生产者、消费者消息拦截
  • C++ 内存对齐:alignas 与 alignof
  • git将本地项目上传到远程空仓库里
  • k8s中Deployment和StatefulSet两种控制器之间的比较
  • 【华为HCIP实战课程二十八】中间到中间系统协议IS-IS邻居关系排错,网络工程师
  • 网络设置:静态IP与动态IP,何去何从?
  • Odoo:免费开源的医药流通行业信息化解决方案
  • 视频号带货书籍,一天佣金1200+(附视频教程)
  • LangGPT结构化提示词编写实践(L1G3000 浦语提示词工程实践)
  • 聊一聊Qt中的按钮
  • (代码随想录)BEllman_ford算法 及其优化 SPFA
  • 【无标题】基于SpringBoot的母婴商城的设计与实现
  • 如何利用数据分析,做到低成本获客?
  • 【Oracle APEX开发小技巧10】CSS样式控制交互式报表列宽和自动换行效果
  • Python语言的12个基础知识点小结
  • Vivo手机怎样才能投屏到别的安卓手机上去?
  • 【react如何在chrome浏览器里面调试?】
  • 【论文速看】DL最新进展20241104-自动驾驶、图像超分、目标检测
  • 【大数据学习 | kafka】kafka的数据存储结构
  • Android 部署web服务器
  • 中央处理器 II
  • Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景