uniapp项目使用防抖及节流的方案实战

 更新时间:2023年01月19日 11:52:28   作者:费玉清  
防抖就是指触发事件后把触发非常频繁的事件合并成一次去执行,节流是指频繁触发事件时只会在指定的时间段内执行事件回调,即触发事件间隔大于等于指定的时间才会执行回调函数,这篇文章主要给大家介绍了关于uniapp项目使用防抖及节流的相关资料,需要的朋友可以参考下

此方案出现的理由

  • 小程序中无法使用vue.directive的指令方法函数实现防抖节流
  • 传统的防抖节流方式相对繁琐

实现方案及效果

  • 新建一个debounce-view组件
  • 直接用debounce-view包裹需要防抖的内容即可,如下:
<debounce-view @thTap="buyNow">
        <view class="buy-now">立即购买</view>
</debounce-view>

防抖组件内容:

//debounce-view
<template>
	<view @click.stop="deTap">
		<slot></slot>
	</view>
</template>

<script>
	function deBounce(fn, delay = 500, immediate) {
		let timer = null,
			immediateTimer = null;

		return function() {
			let args = arguments,
				context = this;

			// 第一次触发
			if (immediate && !immediateTimer) {

				fn.apply(context, args);
				//重置首次触发标识,否则下个周期执行时会受干扰
				immediateTimer = setTimeout(() => {
					immediateTimer = null;
				}, delay);
			}
			// 存在多次执行时,重置动作需放在timer中执行;
			if (immediateTimer) clearTimeout(immediateTimer);
			if (timer) clearTimeout(timer);

			timer = setTimeout(() => {
				fn.apply(context, args);
				timer = null;
				immediateTimer = null;
			}, delay);
		}
	}
	export default {
		methods: {
			deTap: deBounce(function() {
				console.log('deTap')
				this.$emit('deTap')
			}, 500, true),
		}
	}
</script>

<style>
</style>

节流组件内容:

<template>
	<view @click.stop="thTap">
		<slot></slot>
	</view>
</template>

<script>
	// 第二版
	function throttle(func, wait) {
		var timeout;
		var previous = 0;

		return function() {
			context = this;
			args = arguments;
			if (!timeout) {
				timeout = setTimeout(function() {
					timeout = null;
					func.apply(context, args)
				}, wait)
			}

		}
	}
	export default {
		methods: {
			thTap: throttle(function() {
				this.$emit('thTap')
			}, 500)
		}
	}
</script>

<style>
</style>

总结

  • 上述方法有有点但也有缺点,优点是使用起来非常的快捷方便,缺点是时间目前是写死的,各位看官如果有新的想法或者意见还请指教小弟一二

到此这篇关于uniapp项目使用防抖及节流的文章就介绍到这了,更多相关uniapp使用防抖及节流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • javascript中字符串处理常用的方法汇总

    javascript中字符串处理常用的方法汇总

    JavaScript中操作字符串是一个很重要的话题,下面这篇文章主要给大家介绍了关于javascript中字符串处理常用的方法,文中通过图文以及代码示例介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • BootStrap Table对前台页面表格的支持实例讲解

    BootStrap Table对前台页面表格的支持实例讲解

    bootstrap-table是在bootstrap的基础上面做了一些封装,所以在使用bootstrap-table之前要导入的js和css,下面通过本文给大家详细介绍需要引入的文件,对bootstrap table 表格感兴趣的朋友一起看看吧
    2016-12-12
  • Javascript中this绑定的3种方法与比较

    Javascript中this绑定的3种方法与比较

    大家都知道JS是一门动态语言,与传统的c和c++最大的区别就是js是在运行时动态检测值的类型和变化。this是js中的一个关键字,它代表当前作用域的上下文环境,而且随着上下文的改变而动态变化。这篇文章我们将详细介绍Javascript中绑定this的三种方法与简单的比较。
    2016-10-10
  • JS 实现缓存算法的示例(FIFO/LRU)

    JS 实现缓存算法的示例(FIFO/LRU)

    这篇文章主要介绍了JS 实现缓存算法的示例(FIFO/LRU),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 举例分析HTTP 302 Redirect工作原理

    举例分析HTTP 302 Redirect工作原理

    这篇文章主要为大家介绍了关于HTTP 302 Redirect的举例分析,让大家理解HTTP 302 Redirect工作原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2023-12-12
  • 最全的Javascript编码规范(推荐)

    最全的Javascript编码规范(推荐)

    本文给大家总结了js编码规范知识,非常实用,在日常程序开发中经常可以用到,大家务必掌握
    2016-06-06
  • Javascript中prototype属性实现给内置对象添加新的方法

    Javascript中prototype属性实现给内置对象添加新的方法

    这篇文章主要介绍了Javascript中prototype属性实现给内置对象添加新的方法,涉及javascript中prototype属性的使用技巧,需要的朋友可以参考下
    2015-05-05
  • Javascript笔记一 js以及json基础使用说明

    Javascript笔记一 js以及json基础使用说明

    JavaScript中的数据很简洁的。简单数据只有 undefined, null, boolean, number和string这五种,而复杂数据只有一种,即object。
    2010-05-05
  • Bootstrap轮播图学习使用

    Bootstrap轮播图学习使用

    这篇文章主要为大家详细介绍了Bootstrap轮播图学习使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • js中关于一个分号的崩溃示例

    js中关于一个分号的崩溃示例

    下面的js代码不管if条件的结果是true还是false都会执行大括号的代码,结果发现if条件括号后面多写了分号,崩溃啊
    2013-11-11

最新评论