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

基于Vue3内置的lodash函数库实现防抖节流

前言

防抖节流是可以说是一种优化组件性能的技巧,可以有效减少组件中的渲染次数和计算量,从而提高组件的响应速度和用户体验。在Vue3中可以使用`lodash`库中的`debounce`和`throttle`函数来分别实现防抖和节流。当然也可以自行设计实现防抖节流函数,调用方式都差不多。

防抖:在一定时间内,多次触发同一事件,只执行最后一次操作,常用于输入框搜索、滚动加载等场景。

节流:在一定时间内,多次触发同一事件,限制函数执行频率,防止函数被频繁调用,从而提高页面性能。

一、基于Vue3内置的lodash函数库实现防抖节流

(1)导入lodash函数库的防抖和节流方法

import { debounce, throttle } from 'lodash'

(2)写两个按钮

<el-button size="small" type="primary" @click="handleDebounceClick($event)">
  <el-icon :size="16" style="margin-right: 5px;"><Basketball /></el-icon>
  <small>防抖·篮球</small>
</el-button>

<el-button size="small" type="primary" @click="handleThrottleClick($event)">
  <el-icon :size="16" style="margin-right: 5px;"><Football /></el-icon>
  <small>节流·足球</small>
</el-button>

(3)写两个方法

/**
 * 防抖·篮球
 */
const handleDebounceClick = debounce((evt) => {

  // ---- ^ 业务逻辑 ----
  // 定义fn方法
  const fn = (evt) => {

    console.log('debounce =>', evt)
  }
  // 调用fn方法
  fn(evt)
  // ---- / 业务逻辑 ----
}, 1000)

/**
 * 节流·足球
 */
const handleThrottleClick = throttle((evt) => {

  // ---- ^ 业务逻辑 ----
  // 定义fn方法
  const fn = (evt) => {

    console.log('throttle =>', evt)
  }
  // 调用fn方法
  fn(evt)
  // ---- / 业务逻辑 ----
}, 1000)

(4)防抖节流的实现方法

/**
 * 防抖
 */
const debounce = (fn, time) => {

  let timer = null
  return (...args) => {

    const context = this
    if (timer) {

      clearTimeout(timer)
    }
    timer = setTimeout(() => {

      fn.call(context, ...args)
    }, time)
  }
}

/**
 * 节流
 */
const throttle = (fn, time) => {
  
  let activeTime = null
  return (...args) => {
   
    const context = this
    const current = Date.now()
    if (current - activeTime >= time) {
   
      fn.call(context, ...args)
      activeTime = Date.now()
    }
  }
}


http://www.kler.cn/news/325848.html

相关文章:

  • centos9 nginx 版本
  • 深入解析Excel文件格式:.xls与.xlsx的差异与应用指南
  • 网络战时代的端点安全演变
  • HTML流光爱心
  • 【VUE】axios组件
  • 解决 Pandas 中的 XLRDError:处理 “Excel xlsx file; not supported” 错误
  • 知识产权的力量
  • 四十五、多云/混合云架构设计(多云监控平台与工具介绍)
  • 动态规划算法专题(一):斐波那契数列模型
  • 机器学习课程学习周报十四
  • 常见电脑品牌BIOS设置与进入启动项快捷键
  • 物理学基础精解【23】
  • golang学习笔记27-反射【重要】
  • C++ | Leetcode C++题解之第447题回旋镖的数量
  • 汽车EDI:Martinrea EDI 对接
  • 自动驾驶系统研发系列—智能驾驶守门员:详解DOW(开门预警)功能,开启更安全的驾驶体验
  • 字节C++抖音直播一面-面经总结
  • JAVA线程基础二——锁的概述之乐观锁与悲观锁
  • 【前端】ES12:ES12新特性
  • 【Python报错已解决】TypeError: ‘list‘ object is not callable
  • 探索AI新纪元:揭秘Mammoth库的神秘面纱
  • plt.bar函数介绍及实战
  • linux服务器部署filebeat
  • 【30天玩转python】自动化与脚本编写
  • 各种 JIT(Just-In-Time) 编译器
  • Python | Leetcode Python题解之第446题等差数列划分II-子序列
  • 鸿蒙harmonyos next flutter通信之MethodChannel获取设备信息
  • 【Python】Curdling:Python 包管理的高效工具
  • 基于STM32与OpenCV的物料搬运机械臂设计流程
  • 卷积神经网络 循环神经网络