IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue中使用自定义指令实现防抖节流 -> 正文阅读

[JavaScript知识库]Vue中使用自定义指令实现防抖节流

个人在vue中使用防抖中一般会绑定vm实例做定时器的绑定对象,大家也可以根据自己的实际需求修改防抖节流的函数

//'@/utils/debounce.js' 文件


function throttle(bindObj, fn, delay) {
	bindObj.$$prevTime = Date.now()
	return function(...args) {
		const nowTime = Date.now()
		if(nowTime - bindObj.$$prevTime > delay) {
			fn.apply(this, args)
			bindObj.$$prevTime = nowTime
		}
	}
}

function debounce(bindObj, fn, delay) {
	return function(...args) {
		bindObj.$$timer && clearTimeout(bindObj.$$timer)
		bindObj.$$timer = setTimeout(() => {
			fn.apply(this, args)
		}, delay)
	}
}

export {
	debounce,
	throttle
}

// '@/plugin/index.js'文件

import Vue from 'vue'
import { debounce, throttle } from '@/utils/debounce'

Vue.directive('debounce', {
	bind(el, binding, vnode) {
		const [emit, fn, delay=1000] = binding.value
		el.addEventListener(emit, debounce(vnode, fn, delay))
	}
})

Vue.directive('throttle', {
	bind(el, binding, vnode) {
		const [emit, fn, delay=1000] = binding.value
		el.addEventListener(emit, throttle(vnode, fn, delay))
	}
})

最后在main.js引入plugin

// main.js文件
....
import './plugin/index.js'
....

然后在我们需要使用防抖节流的地方用v-debounce 或者v-throttle

传参为一个数组 第一项是 事件类型(click/mousemove...) 第二项是事件函数 第三项是防抖节流的时间 可以不传 默认为1000ms

<template>
	<div class="about">
		<div class="box" v-debounce="['mousemove', addNum]">
			<h1>{{num}}</h1> 
		</div>
	</div>
</template>

<script>
export default {
	data: () => ({
		num: 0
	}),
	methods: {
		addNum() {
			this.num++
		}
	}
}
</script>
<style scoped="scoped">
.box {
	width: 100px;
	height: 100px;
	background: skyblue;
}
</style>

?

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 16:34:41  更:2021-08-23 16:37:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 5:00:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计