点击元素自身以外的dom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 点击元素自身意外的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'<br>链接:: https://www.cnblogs.com/yan-975-yy/p/15629466.html

 以下为防止重复点击自定义指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 防止多次点击
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

  

1
2
// 导出以上 ,以上方法均为参考别人的,为防止丢失copy
export default { preventReClick, clickoutside }

  

 

posted @   everseven  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示