vue自定义指令,包装函数节流。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue自定义指令,包装函数节流。相关的知识,希望对你有一定的参考价值。
参考技术AVue 提供了自定义指令的5个钩子函数:
钩子函数的 参数 (即 el、binding、vnode 和 oldVnode )。
项目中 el + binding.value 就够用了,比如网上搜的一个例子,函数节流指令:
本来那个input 是原生元素,想试试组件el-input支持不 结果还真支持,所以看了下组件源码,结果这里的el只是input的父元素div!!!el-input没有做任何操作,而且支监听div的keyup起到节流效果,没有任何问题??? 一脸黑人问号。。。求大神解释
为了安全起见 还是绑定给input了。
手把手教你在vue中使用自定义指令全局封装防抖节流函数
第一步在src下创建utils文件夹并创建common.js文件
//'@/utils/common.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
第二步在src下创建plugin文件夹并创建index.js文件
// '@/plugin/index.js'文件
import Vue from 'vue'
import debounce, throttle from '../units/common'
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中进行引入
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import "./plugin/index"
Vue.config.productionTip = false;
new Vue(
router,
render: (h) => h(App),
).$mount("#app");
最后就可以在想要使用的组件内进行使用了
传参是一个数组,参数分别是事件类型,事件执行函数以及时间(默认为1秒,也可以不传)
///防抖 (只执行最后一次)
<template>
<div>
<input type="button" v-debounce="['click', jiantin]" value="点击" />
<h1> num </h1>
</div>
</template>
<script>
export default
data()
return
num: 0,
;
,
methods:
jiantin()
this.num++;
,
,
;
</script>
<style>
</style>
//节流 (在一段时间内只执行一次)
<template>
<div>
<input type="button" v-throttle="['click', jiantin, 3000]" value="点击" />
<h1> num </h1>
</div>
</template>
<script>
export default
data()
return
num: 0,
;
,
methods:
jiantin()
this.num++;
,
,
;
</script>
<style>
</style>
以上是关于vue自定义指令,包装函数节流。的主要内容,如果未能解决你的问题,请参考以下文章