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

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

image.png

自定义指令 v-click-outside

文档

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

实现代码

<template>
  <div class="TestClickOutside">
    <div
      class="TestClickOutside__inner"
      v-click-outside="handleClickOutside"
    ></div>
  </div>
</template>
<script>
// 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() {},
}
</script>
<style lang="less"></style>
<style lang="less" scoped>
.TestClickOutside__inner {
  width: 100px;
  height: 100px;
  background-color: #666666;
}
</style>

vue-click-outside

文档

安装

$ npm install vue-click-outside
<template>
  <div class="TestClickOutside">
    <div
      class="TestClickOutside__inner"
      v-click-outside="handleClickOutside"
    ></div>
  </div>
</template>
<script>
// 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() {},
}
</script>
<style lang="less"></style>
<style lang="less" scoped>
.TestClickOutside__inner {
  width: 100px;
  height: 100px;
  background-color: #666666;
}
</style>

参考

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

相关文章
|
1月前
|
JavaScript 前端开发
JavaScript实现鼠标放上去之后高亮显示且隔行换色
JavaScript实现鼠标放上去之后高亮显示且隔行换色
13 0
|
3月前
|
JavaScript 前端开发
|
24天前
|
JavaScript
事件触发、事件捕获与事件冒泡(js的问题)
事件触发、事件捕获与事件冒泡(js的问题)
12 0
|
5天前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素传递,而事件捕获则从外层元素向内层传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。示例代码展示了如何设置。
19 2
|
26天前
|
JavaScript 前端开发 流计算
JS:oninput和onchange事件的区别
JS:oninput和onchange事件的区别
21 1
N..
|
1月前
|
JavaScript 前端开发 开发者
Vue.js自定义指令
Vue.js自定义指令
N..
12 0
N..
|
1月前
|
JavaScript 前端开发 数据处理
Vue.js的过滤器和监听属性
Vue.js的过滤器和监听属性
N..
19 1
|
1月前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素依次触发事件,而事件捕获则从最外层元素向内层元素传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。例如: ```javascript element.addEventListener(&#39;click&#39;, console.log, false); // 冒泡 element.addEventListener(&#39;click&#39;, console.log, true); // 捕获 ```
18 0
|
1月前
|
JavaScript 前端开发
JS页面加载事件
JS页面加载事件
|
1月前
|
JavaScript