您当前的位置: 首页 >  ide

彭世瑜

暂无认证

  • 5浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Vue2.js:v-click-outside自定义指令和vue-click-outside监听鼠标点击元素外部区域事件

彭世瑜 发布时间:2022-08-25 16:20:42 ,浏览量:5

在这里插入图片描述

自定义指令 v-click-outside

文档

  • https://v2.cn.vuejs.org/v2/guide/custom-directive.html

v-click-outside 可以实现点击外部区域才触发事件

实现代码


  
    
  



// created at 2022-08-25
export default {
  name: 'TestClickOutside',

  props: {},

  components: {},

  data() {
    return {}
  },

  directives: {
    'click-outside': {
      bind(el, binding, vnode) {
        console.log('bind')
        function eventHandler(e) {
          if (el.contains(e.target)) {
            return false
          }
          // 如果绑定的参数是函数,正常情况也应该是函数,执行
          if (binding.value && typeof binding.value === 'function') {
            binding.value(e)
          }
        }
        // 用于销毁前注销事件监听
        el.__click_outside__ = eventHandler
        // 添加事件监听
        document.addEventListener('click', eventHandler)
      },

      unbind(el, binding, vnode) {
        console.log('unbind')

        // 移除事件监听
        document.removeEventListener('click', el.__click_outside__)
        // 删除无用属性
        delete el.__click_outside__
      },
    },
  },

  methods: {
    handleClickOutside() {
      console.log('handleClickOutside')
    },
  },

  created() {},
}





.TestClickOutside__inner {
  width: 100px;
  height: 100px;
  background-color: #666666;
}


vue-click-outside

文档

  • github https://github.com/vue-bulma/click-outside

安装

$ npm install vue-click-outside

  
    
  



// created at 2022-08-25
import ClickOutside from 'vue-click-outside'

export default {
  name: 'TestClickOutside',

  props: {},

  components: {},

  data() {
    return {}
  },

  directives: { ClickOutside },

  computed: {},

  methods: {
    handleClickOutside() {
      console.log('handleClickOutside')
    },
  },

  created() {},
}





.TestClickOutside__inner {
  width: 100px;
  height: 100px;
  background-color: #666666;
}


参考 vue 解除鼠标的监听事件的方法

关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.3666s