点击元素自身以外的dom
// 点击元素自身意外的dom
const clickoutside = Vue.directive('clickoutside', {
bind (el, binding, vnode, oldVnode) {
function documentHandler (e) {
// 如果是元素本体则返回
if (el.contains(e.target)) return false
if (binding.expression) {
// 有绑定函数,则执行 binding.value指的是绑定的值
binding.value(e)
}
}
el.__vueClickOutside__ = documentHandler
document.addEventListener('click', documentHandler)
},
inserted (el) {},
update (el, binding, vnode, oldVnode) {},
// 解除绑定
unbind (el, binding, vnode, oldVnode) {
document.removeEventListener('click', el.__vueClickOutside__)
delete el.__vueClickOutside__
}
})
使用: 在元素上加上v-clickoutside,也可v-clickoutside='getTest'
链接:: https://www.cnblogs.com/yan-975-yy/p/15629466.html
以下为防止重复点击自定义指令:
// 防止多次点击
const preventReClick = Vue.directive('preventReClick', {
inserted: function (el, binding) {
el.addEventListener('click', () => {
if (!el.disabled) {
el.disabled = true
setTimeout(() => {
el.disabled = false
}, binding.value || 3000)
}
})
}
})
使用:v-preventReClick
// 导出以上 ,以上方法均为参考别人的,为防止丢失copy
export default { preventReClick, clickoutside }

浙公网安备 33010602011771号