Vue 自定义指令实现点击DOM元素以外触发事件

news/2024/7/10 0:10:43 标签: javascript, vue, 自定义组件, outside-click, 前端

1.directive.js

javascript">import Vue from "vue";

// 提交验证

Vue.directive("clickOutside", {
  // 初始化指令

  bind(el, binding, vnode) {
    function clickHandler(e) {
      // 这里判断点击的元素是否是本身,是本身,则返回

      if (el.contains(e.target)) {
        return false;
      }

      // 判断指令中是否绑定了函数

      if (binding.expression) {
        // 如果绑定了函数 则调用那个函数,此处binding.value就是handleClose方法

        binding.value(e);
      }
    }

    // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听

    el.__vueClickOutside__ = clickHandler;

    document.addEventListener("click", clickHandler);
  },

  update() {},

  unbind(el, binding) {
    // 解除事件监听

    document.removeEventListener("click", el.__vueClickOutside__);

    delete el.__vueClickOutside__;
  },
});
2.main.js
javascript">//自定义指令引入

import './directive/directive'

3.使用

<div v-click-outside="isShowAgree"></div>

这是全局的写法,使用起来十分简单,如果是另外的元素点击出现的相关div,使用@click.stop就可以解决了


http://www.niftyadmin.cn/n/1466617.html

相关文章

Vue 实现复制功能,不需要任何结构内容直接复制方式

介绍&#xff1a; 在做复制文档功能时&#xff0c;考虑到是个不太会复用的小功能&#xff0c;最后选择直接用 document.execCommand 方法实现。 在查阅资料时候&#xff0c;发现其他人都需要在页面上写上结构、ID。然后捕捉某个ID获取内容&#xff0c;感觉很不方便。 使用&a…

css3字体背景颜色跑马灯

页面效果 CSS .title {border: 0px;font-size: 200%;font-weight: bold;float: left;line-height: 1.5;width: 100%;padding-left: 5px;margin-top:0px;background: -webkit-linear-gradient(left,#ffffff,#ff0000 6.25%,#ff7d00 12.5%,#ffff00 18.75%,#00ff00 25%,#00ffff 31.…

vue路由切换之淡入淡出的简单实现

路由跳转的淡入淡出 在开发中有一种需求叫高端、大气、上档次。所以作为一个前端有责任让你的程序开起来更酷炫。可以在页面切换时我们加入一些动画效果&#xff0c;提升我们程序的动效设计 想让路由有过渡动画&#xff0c;需要在<router-view>标签的外部添加<trans…

基于vuex的任务事项管理的小demo

基于vuex的任务管理的小demo&#xff0c;适合学习vuex&#xff0c;充分运用了vuex 程序demo页面 使用到的vuex方法总概况 大家可以自己看看&#xff0c;探讨一下&#xff0c;附git地址&#xff1a; https://github.com/erdfty/vuex-todos

关于Vue不能监听(watch)数组变化

一、vue监听数组 vue实际上可以监听数组变化&#xff0c;比如 data () {return {watchArr: [],}; }, watchArr (newVal) {console.log(监听&#xff1a; newVal); }, created () {setTimeout(() > {this.watchArr [1, 2, 3];}, 1000); }, 在比如使用splice(0,2,3)从数组…

vue中事件修饰符详解(stop, prevent, self, once, capture, passive)

.stop 是阻止冒泡行为,不让当前元素的事件继续往外触发,如阻止点击div内部事件,触发div事件.prevent 是阻止事件本身行为,如阻止超链接的点击跳转,form表单的点击提交.self 是只有是自己触发的自己才会执行,如果接受到内部的冒泡事件传递信号触发,会忽略掉这个信号.capture 是改…

vue3.0中setup使用(两种用法)

一、setup函数的特性以及作用 可以确定的是 Vue3.0 是兼容 Vue2.x 版本的 也就是说我们再日常工作中 可以在 Vue3 中使用 Vue2.x 的相关语法 但是当你真正开始使用 Vue3 写项目时 你会发现他比 Vue2.x 方便的多 Vue3 的一大特性函数 ---- setup 1、setup函数是处于 生命周期函数…

Do not access Object.prototype method ‘hasOwnProperty‘ from target object

今天用对象的属性hasOwnProperty&#xff0c;去判断对象是否包含该值&#xff0c;我这里主要判断对象是否为空&#xff0c;出现了以上错误&#xff0c;之前也遇到过类似的错误&#xff0c;如parseInt&#xff08;‘24.5’&#xff09;&#xff0c;必须要给转换的进制类型&#…