在vue中使用防抖函数或节流函数

本文介绍了防抖与节流在前端开发中的应用场景,如用户快速点击和懒加载。防抖函数通过限制函数在特定时间间隔内的执行次数,确保连续触发后仅执行最后一次操作。节流函数则保证在设定的时间窗口内只调用一次事件处理函数。在Vue中,可以简单地引入并使用这两个技术来优化性能。
摘要由CSDN通过智能技术生成

防抖和节流在这里就不多做解释了,对于防止用户多次快速点击时,或者懒加载等场景中会使用到这两种常用的限制函数。

防抖:

首先是防抖的函数:

/**
 * 防抖处理 适用于点击事件
 * @param {function}  func        回调
 * @param {number}    wait      时间窗口的间隔
 * @param {boolean}    immediate     是否立即执行
 */


export function debounce(func, wait = 500, immediate = true){
	let timer, ctx, args;
	const later = () => setTimeout(() => {
		timer = null;
		if (!immediate) {
			func.call(ctx, ...args);
			ctx = args = null;
		}
	}, wait);

	return function (){
		if (!timer) {
			timer = later();
			if (immediate) {
				func.call(this, ...arguments);
			}else{
				ctx = this;
				args = arguments;
			}
		} else {
			clearTimeout(timer);
			timer = later();
		}
	};
}

防抖函数的大概的原理就是当持续触发事件时,一定时间段内没有再触发事件

触发原函数(func)过后会有一个setTimeout时间(wait),在这个时间内再次触发原函数(func)的时候不会执行原函数,并且再次重置一次setTimeout,所以效果为连续触发后只会执行最后一次操作。

immediate 参数的作用就是是否马上执行原函数,如果参数immediate为false的话,不会马上触发原函数,而是等待wait时间后才会触发。

在vue中使用:

在vue中使用时,只需要引入之后在原函数外层包裹一下即可

// 首先引入防抖函数debounce

import {debounce} from './toolbox';

// template中click事件不变

<Button @click="createLive('creatRoom')">创建</Button>

// methods中事件的逻辑部分被包裹,type就是参数,如果没有参数就不用填

createLive: debounce(function (type) {
    console.log('这里面是函数逻辑');
}, 1000)

 

节流:

项目中并没有用到节流,但是大概写了一个函数供参考。

/**
 * 节流处理  适用于懒加载等场景
 * @param {function}  func      回调
 * @param {number}    wait      时间窗口的间隔
 */

export function throttle(func, wait= 1000) {
	let timer, canRun  = true;
	const later = () => setTimeout(() => {
		func.call(this, ...arguments);
		canRun = true;
	}, wait);

	return function () {
		if (!canRun) return;
		canRun = false;
		clearTimeout(timer);
		timer = later();
	};
}

节流函数的大概原理就是当持续触发事件时,保证一定时间段内只调用一次事件处理函数

在vue中使用起来与防抖是一样的。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值