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 解除鼠标的监听事件的方法

相关文章
|
JavaScript 算法 开发者
如何用JS实现在网页上通过鼠标移动批量选择元素的效果?
本文介绍了类似电脑桌面通过鼠标选择多个图标的实现原理。主要通过监听mousedown、mousemove和mouseup事件,动态调整选择框大小并计算与元素的重叠情况。提供了角重叠和相交重叠的检测方法,并附有示例代码和在线演示链接,方便开发者参考与测试。
519 56
|
JavaScript
JS鼠标框选并删除HTML源码
这是一个js鼠标框选效果,可实现鼠标右击出现框选效果的功能。右击鼠标可拖拽框选元素,向下拖拽可实现删除效果,简单实用,欢迎下载
238 4
|
数据采集 存储 监控
实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标
本文介绍了如何使用Node.js和Puppeteer实现自动化数据抓取,特别是针对新闻网站“澎湃新闻”。通过设置代理IP、User-Agent和Cookie,提高爬虫的效率和隐蔽性,避免被网站封锁。代码示例展示了如何模拟鼠标点击、键盘输入等操作,抓取并整理新闻数据,适用于需要规避IP限制和突破频率限制的场景。
896 10
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
1277 0
|
JavaScript 前端开发 API
JavaScript全屏,监听页面是否全屏
JavaScript全屏,监听页面是否全屏
484 0
|
JavaScript 前端开发 开发者
前端技术分享:Vue.js 中的自定义指令
【10月更文挑战第1天】前端技术分享:Vue.js 中的自定义指令
303 5
在 Vue.js 中使用 watch 来监听对象属性的变化
在 Vue.js 中使用 watch 来监听对象属性的变化
|
JavaScript 前端开发 API
js全屏,监听页面是否全屏
js全屏,监听页面是否全屏
602 4
|
测试技术 API Android开发
autox.js如何监听异常情况,比如网络中断、内存慢、应用死机或者页面无响应
autox.js如何监听异常情况,比如网络中断、内存慢、应用死机或者页面无响应
|
JavaScript
js 滚动鼠标滑轮放大缩小图片
js 滚动鼠标滑轮放大缩小图片
256 0