【前端】防抖和节流

防抖

防抖用于限制连续触发的事件的执行频率。当一个事件被触发时,防抖会延迟一定的时间执行对应的处理函数。如果在延迟时间内再次触发了同样的事件,那么之前的延迟执行将被取消,重新开始计时。

总结:在单位时间内频繁触发事件,只有最后一次生效

场景 :用户在输入框输入1个字符都会发送请求,正常是全部输入完成才发送

项目中遇到的场景,需要鼠标悬浮在图表的时候,将ToolsTip里的数据回显到头部,由于是2张图表,无法直接赋值,必须通过请求后端接口,由于ToolsTip里的Api是鼠标放上面就会触发,就会出现发起了N个请求,这时候就可以利用防抖,只有一定时间没有动作,才会请求后端接口。

vue中

js 复制代码
	//防抖方法,传入函数和延迟
    debounce(fn, delay) {
      let timer = null;              //默认是空
      return function () {
        if (timer) {                 //如果存在则
          clearTimeout(timer);       //清空定时器
        }
        timer = setTimeout(() => {   //赋值定时器
          fn();
        }, delay);
      };
    },

监听echarts的tooltip 事件

js 复制代码
      let charts = document.getElementById('line_charts');
      let myChart = this.$echarts.init(charts);
      myChart.on(
        'showTip',
        this.debounce(() => {
          that.getData();
        }, 2000)
      );

如果是监听input输入框

参考如下:

js 复制代码
    const inputDOM = document.getElementById('input')
    function debounce(fn, delay) {
      let timer = null
      return function () {
        if (timer) {
          clearTimeout(timer)
        }
        timer = setTimeout(() => {
          fn()
        }, delay)
      }
    }
    inputDOM.addEventListener(
      'input',
      debounce(() => {
        console.log('发送请求')
      }, 500)
    )

节流

节流是一种限制函数执行频率的技术。它可以确保在某个时间段内,函数不会被连续触发执行,而是以一定的时间间隔执行。

总结:一段时间内只执行一次

函数节流的常见应用场景是在处理频繁触发的事件,例如验证码刷新、窗口滚动、鼠标点击等。通过使用函数节流,可以减少事件处理函数的执行次数,提高性能和响应速度。

传入需要节流的函数和延迟即可

js 复制代码
    //节流 一段时间内只执行一次
    // 第一次执行cd为true,执行定时器,快速第二次进由于定时器还没有结束,cd为true,所以不执行,等待定时器结束,cd为false,执行新一轮
    function throttle(fn, delay) {
      let cd = false
      return function () {
        if (cd) {
          console.log('节流中')
          return false
        }
        cd = true
        setTimeout(() => {
          fn()
          cd = false
        }, delay)
      }
    }
相关推荐
柳杉几秒前
Codex + 可视化大屏工作流实践:15 个行业场景的设计产出合集
前端·openai·数据可视化
YYYing.1 分钟前
【Python系列 (一) 】Python基础疑难杂症
开发语言·python
@#¥&~是乱码鱼啦3 分钟前
ArkWeb开发手记05|SPA单页H5适配、自定义历史栈与全局状态同步
前端·harmonyos
peter67684 分钟前
vue学习小结
前端·vue.js·学习
rannn_1115 分钟前
JVM 垃圾回收面试题全解析:从基础到进阶
java·开发语言·jvm·后端·面试
七仔啊10 分钟前
数字孪生大屏设计器
前端
知野小兔11 分钟前
JavaScript 数组方法大全(超详细整理)
开发语言·前端·javascript
哈__12 分钟前
飞牛OS还在手动维护?我用Ansible把重复操作写成了Playbook
开发语言·ansible·php
道尔柯南12 分钟前
【QT】从零认识 Qt:跨平台 C++ GUI 开发入门
开发语言·c++·qt
火眼金睛记单词15 分钟前
零基础成人重拾英语:第一个月的30天行动地图
前端·经验分享·学习·小程序