前端表单防抖\节流

防抖

前端防抖是一种常用的技术,用于减少频繁触发的事件的性能消耗。当一个事件频繁触发时,可以使用防抖来限制事件的触发频率,只在指定的时间间隔内执行一次。

前端在utils报下创建一个validate.js文件,写如下函数

setTimeout和clearTimeout来控制定时器的执行和清除

/**
 * 函数防抖 (只执行最后一次点击)
 * @param fn  需要执行的函数
 * @param delay 延迟时间,不传则使用设定的500毫秒
 * @returns {Function}
 * @constructor
 */
 export const Debounce = (fn, t) => {
    // 如果不传延迟时间,则设置默认的延迟时间500毫秒
	const delay = t || 500
    // 使用 let 定义一个变量 timer 来存储定时器的ID
	let timer
	return function() {
		const args = arguments

   //如果之前已经有一个定时器在运行,则使用 clearTimeout 清除它,确保之前的函数不会被执行。
		if (timer) {
			clearTimeout(timer)
		}

//使用 setTimeout 设置一个新的定时器。当延迟时间过去后,它会执行一个函数,
// 该函数首先重置 timer 为 null,然后使用 apply 方法调用原始函数 fn,并传入之前保存的参数。
		timer = setTimeout(() => {
			timer = null
			fn.apply(this, args)
		}, delay)
	}
}

在提交表单处引入该文件,并调用该函数方法

import {Debounce} from '@/utils/validate'

// 不传延迟时间
submitForm : Debounce(function(formValue) {
  save(formValue).then(data => {
    this.$message.success('新增成功')
   // todo
  })
}),

// 或者传延迟1s
submitForm : Debounce(function(formValue) {
  save(formValue).then(data => {
    this.$message.success('新增成功')
   // todo
  })
},1000),

节流

前端节流的主要方式是通过控制函数的执行频率来减少函数的调用次数。

常用的节流方式有定时器节流和时间戳节流。

定时器节流:在一定的时间间隔内,只执行一次函数。每次触发事件时,设置一个定时器,                  如果定时器存在则不执行函数,直到定时器触发后执行函数,并重新设置定时器。

时间戳节流:

                在一定的时间间隔内,只执行一次函数。每次触发事件时,记录当前的时间戳,如果当前时间戳与上次执行函数的时间戳的差值大于设定的时间间隔,则执行函数,并更新上次执行函数的时间戳。

// todo

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值