javascript - 检测点击外部元素

标签 javascript vue.js

如何检测元素外的点击?我正在使用 Vue.js,所以它会在我的模板元素之外。我知道如何在 Vanilla JS 中执行此操作,但我不确定在使用 Vue.js 时是否有更合适的方法来执行此操作?

这是 Vanilla JS 的解决方案:Javascript Detect Click event outside of div

我想我可以使用更好的方法来访问元素?

最佳答案

这是我使用的解决方案,它基于 Linus Borg 的回答并且适用于 vue.js 2.0。

Vue.directive('click-outside', {
  bind: function (el, binding, vnode) {
    el.clickOutsideEvent = function (event) {
      // here I check that click was outside the el and his children
      if (!(el == event.target || el.contains(event.target))) {
        // and if it did, call method provided in attribute value
        vnode.context[binding.expression](event);
      }
    };
    document.body.addEventListener('click', el.clickOutsideEvent)
  },
  unbind: function (el) {
    document.body.removeEventListener('click', el.clickOutsideEvent)
  },
});

您使用 v-click-outside 绑定(bind)到它:

<div v-click-outside="doStuff">

Here's a small demo

您可以在 https://v2.vuejs.org/v2/guide/custom-directive.html#Directive-Hook-Arguments 中找到更多关于自定义指令和 el, binding, vnode 的含义的信息。

关于javascript - 检测点击外部元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36170425/

相关文章:

javascript - 从选项播放时 Soundcloud 和波形背景发生变化

javascript - 在 vue.js 中创建一个包含数据的 obj 名称

vue.js - Axios 响应数据替换

vue.js - nuxt js中的自定义指令

vue.js - Vue Boolean prop 是否可以在存在时为真,在不存在时为假?

javascript - 如何从内联类中获得最大值(value)

javascript - 如何在 RequireJS 中模拟单元测试的依赖项?

javascript - 我的视频未通过 youtubebackground api 显示

javascript - jsp页面js函数中的EL表达式

javascript - 如何访问以下JavaScript对象的 "ondrag"方法?