js 防抖和节流(阅读这一篇就够了)

26 篇文章 0 订阅
6 篇文章 1 订阅

防抖(debounce)

所谓防抖,就是指触发事件后,就是把触发非常频繁的事件合并成一次去执行。即在指定时间内只执行一次回调函数,如果在指定的时间内又触发了该事件,则回调函数的执行时间会基于此刻重新开始计算。也就是说,你在一个按钮上连续快速点击1万次用了1小时,也只执行了一次回调

创建utils.js

// -防抖 所谓防抖,就是指触发事件后,就是把触发非常频繁的事件合并成一次去执行。即在指定时间内只执行一次回调函数,
// 如果在指定的时间内又触发了该事件,则回调函数的执行时间会基于此刻重新开始计算。
let timerDebounce = null
export const debounce = (fn, wait = 1000) => {
    console.log('wait',wait);
	if(timerDebounce) {
		console.log('防抖状态');
		clearTimeout(timerDebounce)
	}
	let callNow = !timerDebounce
	timerDebounce = setTimeout(() => {
		timerDebounce = null;
	}, wait)
    if(callNow){
		console.log('===执行函数===',timerDebounce);
		fn();//执行函数
	}
}

节流(throttle)

所谓节流,是指频繁触发事件时,只会在指定的时间段内执行事件回调,即触发事件间隔大于等于指定的时间才会执行回调函数。也就是说,你在一个按钮上连续快速点击1万次用了1小时,会执行16060*1000/wait 次回调
创建utils.js

let timerThrottle = null
// -节流 所谓节流,是指频繁触发事件时,只会在指定的时间段内执行事件回调,即触发事件间隔大于等于指定的时间才会执行回调函数。
export const throttle = (fn, wait = 1000) => {
	console.log('throttle',timerThrottle);
	console.log('wait',wait);
	if(timerThrottle != null){
		console.log('节流状态');
		return;
	}else{
		console.log('===执行函数===',timerThrottle);
		fn();//执行函数
	}
    timerThrottle = setTimeout(() => {
        console.log('节流结束',timerThrottle);
		timerThrottle = null;
    }, wait)
}

在页面中使用

<template>
	<view>
		<view style="margin-top:80rpx;">
			<view style="width:200rpx;">
				<button 
				type="default" 
				@tap="buttonTap">防抖</button>
			</view>
		</view>
	</view>
</template>
<script>
import {debounce} from '@/common/js/utils.js'
export default {
	data() {
		return {
		}
	},
	methods:{
		buttonTap(){
			debounce(()=>{
				console.log('debounce,这里可执行你想要的接口请求等动作');
			},3000)
		}
	}
}
</script>
<template>
	<view>
		<view style="margin-top:80rpx;">
			<view style="height:2000px; width:750rpx; background-color: #006065;">
				滚动页面试试节流~~
			</view>
		</view>
	</view>
</template>
<script>
import {throttle} from '@/common/js/utils.js'
export default {
	data() {
		return {
			// 延时器对象
			scrollTimer : null
		}
	},
	methods:{},
	onPageScroll:function(e){
		throttle(()=>{
			console.log('throttle,这里可执行你想要的接口请求等动作');
		},3000)
	}
}
</script>
<style>
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值