vue项目中使用节流throttle 和 防抖debounce

一、节流和防抖的定义

节流:频繁输入、频繁操作的时候,保持一定频率连续触发,比如 scroll 事件、click 事件。

防抖:频繁输入、频繁操作的时候,在最后才触发事件处理函数,比如 input 输入事件。

关于节流和防抖的更多细节,本篇文章不做重点介绍,想了解可以阅读 《防抖debounce和节流throttle》

二、在 vue项目 中使用防抖和节流

在 vue 项目中,想要给 methods 中的某个方法 fn 增加节流或防抖,应该如何实现?

以节流为例(防抖功能类似):

1、节流函数 throttle 封装

公共类 utils.js 中封装节流函数 throttle,方便全局调用

javascript 复制代码
export const throttle = (fn, delay = 100) => {
	let timer = null
	return function () {
		if (timer) return
		timer = setTimeout(() => {
			fn.apply(this, arguments)
			timer = null
		}, delay)
	}
}

2、引入并使用节流函数 throttle

在需要的页面引入节流函数,使用节流函数包裹要进行节流的方法 fn

javascript 复制代码
在这里插入代码片
import { throttle } from '@/utils/utils.js'

methods: {
	fn: throttle(function() {
		// 业务逻辑
	}, 200)
}

注意:

在vue中,methods中的方法不可以使用箭头函数,

因为箭头函数本身没有this,箭头函数的this会指向父级的this,

如果使用了箭头函数,fn中的this会指向父级的this(window),不再指向vue实例,

同理,使用节流函数throttle包裹的方法,也不能使用箭头函数。

相关推荐
JOEH6016 小时前
为什么你的 CPU 总是突然飙高?Java 生产环境 6 大排查误区
javascript·后端
烛衔溟16 小时前
TypeScript 类型别名、字面量类型、联合类型与交叉类型
前端·javascript·typescript·联合类型·类型别名·字面量类型·交叉类型
Cache技术分享16 小时前
369. Java IO API - DOS 文件属性
前端·后端
慧一居士16 小时前
Nuxt4 项目的约定配置都有哪些,哪些可以自动实现, 详细示例和使用说明
前端·vue.js
芯智工坊16 小时前
每周一个开源项目 #4:ChatGPT-Next-Web 增强版
前端·chatgpt·开源
左右用AI16 小时前
每周1亿次下载的axios被投毒了,但是源码里没有一行恶意代码!
前端·后端
英俊潇洒美少年16 小时前
前端模块化 AMD、CMD、CommonJS、ESM的差异对比
前端
攀登的牵牛花16 小时前
Claude Code 泄露事件复盘:前端发布流程哪里最容易翻车
前端·github·claude
D_C_tyu16 小时前
vue3 + vue3-print-nb 插件实现打印功能
前端·javascript·vue.js
paul_chen2116 小时前
Vite + Vue SPA 在子路径部署(内外网访问+Nginx 反向代理)
前端·vue.js·nginx