Vue3实现带点击外部关闭对应弹出框(可共用一个变量)

这篇具有很好参考价值的文章主要介绍了Vue3实现带点击外部关闭对应弹出框(可共用一个变量)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先,假设您在单文件组件(SFC)中使用了Vue3,并且有两个div元素分别通过`v-if`和`v-else`来切换显示一个带有`.elpopver`类的弹出组件。在这种情况下,每个弹出组件应当拥有独立的状态管理(例如:各自的isOpen变量)。为了实现点击外部关闭对应弹出框的功能,我们需要为每个组件实例绑定唯一的标识并更新事件处理函数。

// 假设你的组件有如下结构
<template>
  <div v-if="showFirst">
    <div class="elpopver" ref="firstPopover">
      <!-- 第一个弹出框的内容 -->
    </div>
  </div>
  <div v-else>
    <div class="elpopver" ref="secondPopover">
      <!-- 第二个弹出框的内容 -->
    </div>
  </div>
</template>

<script setup>
import { onMounted, onUnmounted, ref } from 'vue';

const showFirst = ref(true);
// 可以共用一个组件弹出框,共用一值
const isOpenFirst = ref(false);
const isOpenSecond = ref(false);

const firstPopover = ref(null);
const secondPopover = ref(null);

onMounted(() => {
  document.addEventListener('click', closePopup);
});

onUnmounted(() => {
  document.removeEventListener('click', closePopup);
});

function closePopup(e) {
  if (firstPopover.value && !firstPopover.value.contains(e.target)) {
    isOpenFirst.value = false;
  }
  if (secondPopover.value && !secondPopover.value.contains(e.target)) {
    isOpenSecond.value = false;
  }
}

// 根据需要在其他地方控制 isOpenFirst 和 isOpenSecond 的值以显示/隐藏弹出框
</script>

这里我们利用Vue的`ref`特性获取到两个弹出框的DOM元素,并在事件处理函数`closePopup`中分别判断点击目标是否在各自弹出框内部。文章来源地址https://www.toymoban.com/news/detail-802589.html

到了这里,关于Vue3实现带点击外部关闭对应弹出框(可共用一个变量)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 在Vue表格里写入一个缩略图,并且点击缩略图时,弹出窗口会显示对应的大图

    在Vue表格里写入一个缩略图,并且点击缩略图时,弹出窗口会显示对应的大图

    点击缩略图之后:右上角或者点击幕布之外都可以关闭 这段代码拿去可以直接运行,记得图片路径改成自己的!   - `:visible.sync=\\\"dialogVisible\\\"`:这是一个双向绑定属性,用于控制对话框的显示与隐藏 -:visible.sync` 中的 `.sync` 修饰符使得 `dialogVisible` 属性在对话框的可见性更改时

    2024年01月25日
    浏览(6)
  • vue实现弹出框内嵌页面展示,添加tab切换展示实时加载

    vue实现弹出框内嵌页面展示,添加tab切换展示实时加载

    最近做业务的时候,发现产品的原型图上有一个弹出框,上面包含了两个窗口要进行切换。 每个窗口都有分页列表展示、搜索、添加和删除,感觉就是两个完整的页面,如果全写在一个页面会很麻烦,还可能会出现一系列的问题,后期改起来比较麻烦,所以我就准备分开来写

    2024年02月16日
    浏览(7)
  • 前端echarts地图3D效果+点击地域出现弹出框可以有确定取消操作

    前端echarts地图3D效果+点击地域出现弹出框可以有确定取消操作

    效果图如下:    代码如下: 运行3D项目要安装一下echarts-gl依赖: 引入的jiangsu文件要单独下载json文件,附上两个网址: DataV.GeoAtlas地理小工具系列 POI数据|高德POI|高德兴趣点|高德POI数据|高德POI下载|高德POI数据库|高德POI分类|高德北京市POI|高德上海市POI|高德广州市POI|高德

    2024年02月11日
    浏览(20)
  • vue 弹出框 引入另一个vue页面

    vue 弹出框 引入另一个vue页面

    为什么要这么做,适用于在一个页面逻辑比较多的时候,可以搞多个页面,防止出错 index页面点击解约按钮,弹出框 进入jieyue.vue 核心代码 代码截图 jieyue.vue就是常规代码了 参考博客

    2024年02月12日
    浏览(8)
  • 如何在Vue.js中创建模态框(弹出框)

    如何在Vue.js中创建模态框(弹出框)

    模态框(弹出层对话框,Modal Popup)在大多数现代应用程序中非常常见。它们主要用于呈现简洁的信息,非常适合显示广告和促销内容。模态框提供了一种快速传达信息的方式,并提供了用户友好的关闭选项。 在本文中,我们将使用Vuejs构建一个弹出模态框。该模态框将包括

    2024年02月08日
    浏览(8)
  • jQuery实现简单弹出框

    jQuery实现简单弹出框

    1、点击“更多”出现弹出框 2、点击下拉列表触发回调 3、点击空白区域收起弹出框 PS:鼠标右键效果图`另存为`到本地 ,再将图片后缀gif改为rar即可得到完整代码压缩包。 1、提前声明弹出标识做判断; 2、通过jQuery的has()、is()或其他类似方法判断点击的是弹出层以外的空白

    2024年02月11日
    浏览(8)
  • layer弹出层点击关闭按钮刷新父页面

    在弹出层页面,,找到layer关闭按钮,写一个关闭事件,里面去执行js方法。 例:页面写个a标签方便调用:a id=“hidalayerclose” style=“display: none;” οnclick=“fureload()”

    2024年04月22日
    浏览(11)
  • pyqt5 QMainWindow、Dialog点击关闭弹出是否确定关闭

    pyqt5 QMainWindow、Dialog点击关闭弹出是否确定关闭

    1.在QMainWindow()中,重写closeEvent函数实现窗口关闭事件。 2.在Dialog()中,重写closeEvent函数实现窗口关闭事件。  以上述两种情况做演示,其他情况同上。 注意:    在main()方法中可以看到:我们最终显示的是QMainWindow()类创建的窗口对象,如果想要实现关闭窗口触发弹窗提示

    2024年02月15日
    浏览(12)
  • 基于vue+Element Table Popover 弹出框内置表格的封装

    基于vue+Element Table Popover 弹出框内置表格的封装

    在选择数据的时候需要在已选择的数据中对比选择,具体就是点击一个按钮,弹出一个小的弹出框,但不像对话框那样还需要增加一个遮罩层,更加的轻量化,但是需要查看的数据很多需要一个列表来展示,列表的话还需要一个筛选功能。 我的思路是增加复选框列,将选择的

    2024年02月07日
    浏览(10)
  • 微信小程序实现气泡弹出框

    微信小程序实现气泡弹出框

    这个组件可以实现 引用别人的组件,上面github可以很好的实现气泡弹窗效果 show:function(){ //如果show值为true,则更改为false 反之设置true if(this.data.show){ this.setData({ show:false }) }else{ this.setData({ show:true }) } }, he(){ console.log(“sadasdd”) this.setData({ show:!this.show }) wx.navigateTo({ url: ‘/p

    2024年02月09日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包