前端 vue 函数节流 Throttle 函数防抖 debounce input 输入框 @input 事件处理 input 输入框 @input条件查询 性能优化

78 篇文章 2 订阅
40 篇文章 1 订阅
用法

输入框数字后四位小数校验,每次数据都要去执行方法,这样太消耗了。我们可以使用 函数防抖 (只执行最后一次) 输入最后一次开始触发方法。
其他应用场景是:一个输入框条件查询。每次输入一次调用一次服务查询。这样时间长消耗大。我们就可以使用 函数防抖 (只执行最后一次) 执行最后一次调用。减小服务开销。

<Input v-model.number="number" @input="NumberInput" style="width: 200px">
<script>
export default {
	data() {
		return {
			number:0,
		}
	},
	methods: {
		// number 验证
		NumberInput: debounce(function (value) {
			if (value && value.toString().includes(".")) {
				if (value.toString().split(".")[1].length > 4) {
					this.number = this.toFixed(value, 4)
				}
			}
		}, 100),
		toFixed(number, fractionDigits) {
			var times = Math.pow(10, fractionDigits);
			var roundNum = Math.round(number * times) / times;
			return roundNum.toFixed(fractionDigits);
		},
	}
}
	/**
	 * 函数节流
	 * @param fn
	 * @param interval
	 * @returns {Function}
	 * @constructor
	 */
	function Throttle(fn, t) {
		let last;
		let timer;
		let interval = t || 500;
		return function () {
			let args = arguments;
			let now = +new Date();
			if (last && now - last > interval) {
				clearTimeout(timer);
				timer = setTimeout(() => {
					last = now;
					fn.apply(this, args);
				}, interval);
			} else {
				last = now;
				fn.apply(this, args);
			}
		};
	}
	/**
	 * 函数防抖 (只执行最后一次点击)
	 * @param fn
	 * @param delay
	 * @returns {Function}
	 * @constructor
	 */
	function debounce(fn, t) {
		let delay = t || 500;
		let timer;
		return function () {
			let args = arguments;
			if (timer) {
				clearTimeout(timer);
			}
			timer = setTimeout(() => {
				timer = null;
				fn.apply(this, args);
			}, delay);
		};
	}
</script>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值