vue如何实现点击空白区域关闭弹窗

 更新时间:2025年04月18日 10:17:55   作者:前端学习zzz  
这篇文章主要介绍了vue如何实现点击空白区域关闭弹窗问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vue实现点击空白区域关闭弹窗

效果展示

通过contains判断点击区域是否包含弹框

<template>
  <div ref="list">
      <span @click="is_list_show=!is_list_show">点击</span>
      <ul class="head-list-select" v-if="is_list_show">
        <li>菜单1</li>
        <li>菜单2</li>
        <li>菜单3</li>
        <li>菜单4</li>
        <li>菜单5</li>
      </ul>
  </div>
</template>

点击页面判断

mounted(){
	document.addEventListener("click", this.bodyCloseMenus)
},
beforeDestroy() { // 在页面注销前,删除点击事件
	document.removeEventListener("click", this.bodyCloseMenus);
},
methods: {
	bodyCloseMenus(e){
		let btnstatus = this.$refs['list'];
		if(btnstatus &&!btnstatus.contains(e.target)){
			this.is_list_show = false;
		}
	}
},

刚开始写的时候只想到这种方法,后来百度了一下还有一种通过阻止冒泡@click.stop来实现,尝试了一下可以实现,顺便就记录一下~

<template>
  <div ref="list" @click.stop>
      <span @click="is_list_show=!is_list_show">点击</span>
      <ul class="head-list-select" v-if="is_list_show">
        <li>菜单1</li>
        <li>菜单2</li>
        <li>菜单3</li>
        <li>菜单4</li>
        <li>菜单5</li>
      </ul>
  </div>
</template>
mounted(){
	document.addEventListener("click", this.bodyCloseMenus)
},
beforeDestroy() {
	document.removeEventListener("click", this.bodyCloseMenus);
},
methods: {
	bodyCloseMenus(e){
		let self = this;
     	if (self.is_list_show == true){
     	     self.is_list_show = false;
     	}
	}
},

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue3中使用v-model实现父子组件数据同步的三种方案

    vue3中使用v-model实现父子组件数据同步的三种方案

    这篇文章主要介绍了vue3中使用v-model实现父子组件数据同步的三种方案,如果只有一个匿名v-model的传递的话,可以使用vue3.3新添加的编译宏,defineModel来使用,每种方案结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • Vue eventBus事件总线封装后再用的方式

    Vue eventBus事件总线封装后再用的方式

    EventBus称为事件总线,当两个组件属于不同的两个组件分支,或者两个组件没有任何联系的时候,不想使用Vuex这样的库来进行数据通信,就可以通过事件总线来进行通信,这篇文章主要给大家介绍了关于Vue eventBus事件总线封装后再用的相关资料,需要的朋友可以参考下
    2022-06-06
  • 在vue里如何使用pug模板引擎

    在vue里如何使用pug模板引擎

    这篇文章主要介绍了在vue里如何使用pug模板引擎,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue3新拟态组件库开发流程之table组件源码分析

    vue3新拟态组件库开发流程之table组件源码分析

    这篇文章主要介绍了vue3新拟态组件库开发流程——table组件源码,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • axios无法加载响应数据:no data found for resource with given identifier报错解决

    axios无法加载响应数据:no data found for resource with given i

    最近在在做一个小查询功能的时候踩了一个坑,所以这篇文章主要给大家介绍了关于axios无法加载响应数据:no data found for resource with given identifier报错的解决方法,需要的朋友可以参考下
    2022-11-11
  • uniapp使用scroll-view下拉刷新无法取消的坑及解决

    uniapp使用scroll-view下拉刷新无法取消的坑及解决

    这篇文章主要介绍了uniapp使用scroll-view下拉刷新无法取消的坑及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • vue使用Echarts设置数据无效问题记录及解决方法

    vue使用Echarts设置数据无效问题记录及解决方法

    这篇文章主要介绍了vue使用Echarts设置数据无效问题记录,本文通过场景分析给大家分享解决方法,需要的朋友可以参考下
    2022-08-08
  • Vue项目中使用Base64

    Vue项目中使用Base64

    在vue项目中有时会使用到Base6464转码,现将自己使用的一种方法记录下来,对vue使用Base64相关知识感兴趣的朋友一起看看吧
    2024-02-02
  • 通用vue组件化登录页面实例代码

    通用vue组件化登录页面实例代码

    这篇文章主要给大家介绍了关于通用vue组件化登录页面的相关资料,文中通过图文以及实例代码将解决的办法介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友可以参考下
    2023-08-08
  • Vue3 插槽Slot指南及使用举例

    Vue3 插槽Slot指南及使用举例

    插槽(Slot)是 Vue 提供的一个强大的内容分发机制,允许父组件向子组件注入内容,它使得组件更加灵活和可复用,这篇文章主要介绍了Vue3 插槽Slot指南及使用举例,需要的朋友可以参考下
    2025-05-05

最新评论