点击空白处弹出框取消

新建click-outside.js文件

javascript 复制代码
const clickoutsideContext = '@@clickoutsideContext'

export default {
  /*
   @param el 指令所绑定的元素
   @param binding {Object} 
   @param vnode vue编译生成的虚拟节点
   */
  bind(el, binding, vnode) {
    const documentHandler = function(e) {
      if (!vnode.context || el.contains(e.target)) {
        return false
      }
      if (binding.expression) {
        vnode.context[el[clickoutsideContext].methodName](e)
      } else {
        el[clickoutsideContext].bindingFn(e)
      }
    }
    el[clickoutsideContext] = {
      documentHandler,
      methodName: binding.expression,
      bindingFn: binding.value
    }
    setTimeout(() => {
      document.addEventListener('click', documentHandler)
    }, 0)
  },
  update(el, binding) {
    el[clickoutsideContext].methodName = binding.expression
    el[clickoutsideContext].bindingFn = binding.value
  },
  unbind(el) {
    document.removeEventListener(
      'click',
      el[clickoutsideContext].documentHandler
    )
  }
}

全局使用在main.js中引入,我这里是在assets/js文件中,引入时按照自己的路径引入

javascript 复制代码
import clickOutside from '../../assets/js/click-outside'
Vue.directive('clickoutside', clickOutside)

页面使用,在弹框元素上添加v-clickoutside="事件名"

在methods中写相应的逻辑

相关推荐
远山枫谷5 分钟前
一文理清页面/组件通信与 Store 全局状态管理
前端·微信小程序
codingWhat6 分钟前
手撸一个「能打」的 React Table 组件
前端·javascript·react.js
进击的尘埃6 分钟前
用 TypeScript 的 infer 搓一个类型安全的深层路径访问工具
javascript
HelloReader6 分钟前
Tauri 应用安全从开发到发布的威胁防御指南
前端
bluceli7 分钟前
WebAssembly实战指南:将高性能计算带入浏览器
前端·webassembly
yuki_uix7 分钟前
Object.entries:优雅处理 Object 的瑞士军刀
前端·javascript
Lee川8 分钟前
JavaScript 面向对象编程全景指南:从原始字面量到原型链的终极进化
javascript·面试
奇迹_h4 小时前
打造你的HTML5打地鼠游戏:零基础入门实践
前端
SuperEugene4 小时前
Vue生态精选篇:Element Plus 的“企业后台常用组件”用法扫盲
前端·vue.js·面试
Neptune14 小时前
JavaScript回归基本功之---类型判断--typeof篇
前端·javascript·面试