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利用缩放进行屏幕分辨率适配的解决方案讲解

    Vue3利用缩放进行屏幕分辨率适配的解决方案讲解

    本文详细解析了如何在Vue3中实现一个自动根据设计宽度缩放并调整高度的响应式组件,组件的核心功能包括设计宽度设定、动态缩放比例计算和高度调整,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • 解决Vue2 axios发请求报400错误"Error: Request failed with status code 400"

    解决Vue2 axios发请求报400错误"Error: Request failed with s

    这篇文章主要给大家介绍了关于如何解决Vue2 axios发请求报400错误"Error: Request failed with status code 400"的相关资料,在Vue应用程序中我们通常会使用axios作为网络请求库,需要的朋友可以参考下
    2023-07-07
  • Vue监视数据的原理详解

    Vue监视数据的原理详解

    这篇文章主要为大家详细介绍了Vue监视数据的原理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 一步步教你搭建VUE+VScode+elementUI开发环境

    一步步教你搭建VUE+VScode+elementUI开发环境

    这篇文章主要给大家介绍了关于搭建VUE+VScode+elementUI开发环境的相关资料,近期被配置环境的事情弄得整个人都要炸了,现在整理如下,希望有相同需求的朋友可以不用走弯路,需要的朋友可以参考下
    2023-07-07
  • 解决element-ui库的el-row的gutter=10间距失效问题

    解决element-ui库的el-row的gutter=10间距失效问题

    这篇文章主要介绍了解决element-ui库的el-row的gutter=10间距失效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Vue仿Bibibili首页的问题

    Vue仿Bibibili首页的问题

    这篇文章主要介绍了Vue仿Bibibili首页,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Vue实现无限级树形选择器

    Vue实现无限级树形选择器

    这篇文章主要介绍了Vue实现无限级树形选择器,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • vue中transition动画使用(移动端页面切换左右滑动效果)

    vue中transition动画使用(移动端页面切换左右滑动效果)

    这篇文章主要介绍了vue中transition动画使用(移动端页面切换左右滑动效果),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Vue项目localhost:8080无法访问此网站,拒绝了我们的连接请求的解决方案

    Vue项目localhost:8080无法访问此网站,拒绝了我们的连接请求的解决方案

    前端页面使用的是vue,vue项目启动成功,没有任何报错,服务控制台已出现APP访问地址,点击访问地址出现无法访问此网站,拒绝了我们的连接请求,所以本文给大家介绍了Vue项目localhost:8080无法访问此网站,拒绝了我们的连接请求的解决方案,需要的朋友可以参考下
    2024-12-12
  • 详解Vue3.0 前的 TypeScript 最佳入门实践

    详解Vue3.0 前的 TypeScript 最佳入门实践

    这篇文章主要介绍了详解Vue3.0 前的 TypeScript 最佳入门实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06

最新评论