vuejs 失去焦点,单击全局隐藏某些浮动元素

先看图,

clipboard.png

我们想实现一个这样的功能, 单击高级搜索,弹出一个div,div里面是slot进去的,有各种标签,包括表单元素。再单击其他区域,会隐藏这个弹出的div,类似blur事件。

麻烦给点思路实现这个组件(功能), 写一个这样的组件,弹出框的内容slot进去,里面的表单可以进行操作输入,以及动态渲染dom结点。
请问有朋友实现过类似的功能吗,麻烦给点思路。

阅读 11.7k
5 个回答
created() {
    // 点击其他不在的区域触发事件
    document.addEventListener('click', (e) => {
      console.log(this.$el.contains(e.target));
      if (!this.$el.contains(e.target)){
          this.isShowDialog = false; 
      }
    })
  }

写到你组件里

//html
<div v-show="isShowDialog">

//js
document.addEventListener('click', (e) => {
  if (!this.$el.contains(e.target)) this.isShowDialog = false;
})

主体上可以看这个vue-weui,对于点击slot区域外,自动关闭弹出框,基本的方法可以是
1.在slot外包裹一个div,position为relative,z-index设置为高于透明遮罩层即可。
2.在点击高级搜索时,在body下append一个透明遮罩层,遮罩层z-index低于弹出的sloat,设置透明遮罩层的click事件为关闭slot。

我的方案是给document一个点击事件关闭这个弹窗,然后给这个div一个阻止冒泡

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏