uniapp 防抖和节流的使用

防抖:在一个时间段内触发几次事件,就延迟触发几次,并只触发最后一次事件。
(一直快速触发几分钟后停止,只会执行最后的那一次事件)

节流:在规定时间内仅能触发一次,但到了下一个时间段,也还会继续触发一次事件。
(一直快速触发几分钟后停止,会执行多次事件)

<template>
	<view>
		<button type="primary" @click="fd">防抖</button>
		<button type="primary" @click="jl">节流</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				fdFlag: null,
				jlFlag: true
			}
		},
		methods: {
			/** 防抖 **/
			fd() {
				let that = this
				clearTimeout(this.fdFlag)
				this.fdFlag = setTimeout(() => {
					that.fdDoing()
					that.fdFlag = null
				}, 800)
				// 在此时间段触发几次事件,就延迟触发几次,并只触发最后一次事件。
			},
			fdDoing() {
				console.log('防抖事件触发')
			},
			
			/** 节流 **/
			jl() {
				let that = this
				if (!this.jlFlag) {
					return
				}
				this.jlFlag = false
				setTimeout(() => {
					that.jlDoing()
					that.jlFlag = true
				}, 2000)
				// 函数被点击一次触发执行后,2秒内再点击函数不会被触发事件,可理解为每2秒触发一次事件。
			},
			jlDoing() {
				console.log('节流事件触发')
			}
		}
	}
</script>

<style>
	button{
		margin: 20rpx;
		width: 300rpx;
	}
</style>

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uniapp中,是用来控制频繁触发事件的常用技术。是指在频繁触发某一个事件时,一段时间内或者一定条件下不再触发该事件对应调用的函数。的实现方式是设置一个定时器,在事件触发后延迟一定时间执行函数,如果在该时间段内再次触发事件,就清除之前的定时器并重新设置一个新的定时器,以此来保证只触发最后一次事件。 举个例子,在Uniapp中实现的代码如下: ```javascript export default { data() { return { fdFlag: null } }, methods: { fd() { let that = this clearTimeout(this.fdFlag) this.fdFlag = setTimeout(() => { that.fdDoing() this.fdFlag = null }, 800) }, fdDoing() { console.log('事件触发') } } } ``` 上述代码中,当按钮被点击时,会调用fd方法,在800毫秒的时间段内,如果再次点击按钮,会清除之前的定时器并重新设置一个新的定时器,最终只有最后一次点击会触发fdDoing方法。这样就实现了止按钮多次连续点击的效果。 而是在一个时间段内仅能触发一次事件,但到了下一个时间段,也会再次触发一次事件。的实现方式是设置一个标志位,通过控制该标志位的状态来决定是否触发事件。当事件被触发时,首先检查标志位的状态,如果标志位为false,则表示在规定的时间内已经触发过事件,不再执行后续代码;如果标志位为true,则表示可以执行事件处理函数,并在执行后将标志位设置为false,以此来控制事件的触发频率。 举个例子,在Uniapp中实现的代码如下: ```javascript export default { data() { return { jlFlag: true } }, methods: { jl() { let that = this if (!this.jlFlag) { return } this.jlFlag = false setTimeout(() => { that.jlDoing() this.jlFlag = true }, 2000) }, jlDoing() { console.log('事件触发') } } } ``` 上述代码中,当按钮被点击时,会调用jl方法,在2秒的时间段内,如果再次点击按钮,由于jlFlag为false,所以不会执行后续代码;等到2秒时间过去后,jlFlag会重新设置为true,下次点击按钮时,又会执行jlDoing方法。这样就实现了每2秒触发一次事件的效果。 总结起来,Uniapp中的技术都是为了控制频繁触发事件而设计的。通过延时执行函数来保证只触发最后一次事件,而通过设置标志位来控制事件的触发频率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值