vue3点击出现弹窗后背景变暗且不可操作的实现代码

 更新时间:2022年08月09日 09:53:14   作者:http____  
这篇文章主要介绍了vue3点击出现弹窗后背景变暗且不可操作的实现代码,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

实现vue3点击出现弹窗后背景变暗且不可操作

一、手写遮罩层方法

1. 效果

2. 代码

AddTask.vue是我自定义的组件,即要弹出的弹窗,不是此笔记重点,此处不做详细说明。

<template>
  <div class="bg-cover" v-if="showCover"></div>
  <div class="column" style="width: 25px;">
  	<q-btn v-for="n in 12" round :color="'teal-'+n" icon="add" class="q-ma-lg"/>
  </div>
  <q-btn round color="primary" icon="add" size="24px" class="fixed-bottom-right q-ma-lg" @click="OpenAddTask()" @closeAddTask="closeAddTask" />
  <AddTask :showAddTask.sync="AddTaskFlag" class="addtask-box" @closeAddTask="closeAddTask"></AddTask>
</template>

<script setup>
import { ref } from "vue";
import AddTask from '../components/AddTask.vue'

//添加任务弹窗
let AddTaskFlag = ref(false);
let showCover = ref(false);

function OpenAddTask(){
  AddTaskFlag.value = true;
  showCover.value = true;
  document.body.style.overflow = "hidden"
}
function closeAddTask(){
  AddTaskFlag.value = false;
  showCover.value = false;
  document.body.style.overflow = "auto"
}

</script>

<style scoped lang="scss">

.addtask-box{
  z-index: 99;
  top: 300px;
}

.bg-cover {
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  background-color: rgba(0, 0, 0, .8);
  z-index: 98;
}
</style>

3. 代码分析

4. 改进

上述代码在弹窗较小,不需要滚动弹窗时可用,因为上述方案会导致弹窗也无法滚动而使弹窗内容显示不完全。
如下图,人员列表未显示完全。

解决方法:给弹出层设置overflow-y: scroll;
效果展示:

4. 将背景遮罩层封装成组件使用

将背景遮罩层封装成一个组件,可以实现复用,而不需要在每一个需要使用的页面都写一遍html和css样式。

BgCover.vue:

<template>
  <div class="bg-cover" v-if="showCover"></div>
</template>

<script setup>
const props = defineProps(['showCover'])
</script>

<style scoped lang='scss'>
.bg-cover {
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  background-color: rgba(0, 0, 0, .8);
  z-index: 98;
}
</style>

其他组件中需要使用时:

<template>
    <BgCover :showCover.sync="showCoverFlag"></BgCover>
    <div class="column" style="width: 25px">
        <q-btn v-for="n in 12" round :color="'teal-' + n" icon="add" class="q-ma-lg" />
    </div>
    <q-btn round color="primary" icon="add" size="24px" class="fixed-bottom-right q-ma-lg" @click="OpenAddTask()"
        @closeAddTask="closeAddTask" />
    <AddTask :showAddTask.sync="AddTaskFlag" class="addtask-box" @closeAddTask="closeAddTask"></AddTask>
</template>

<script setup>
import { ref } from "vue";
import AddTask from "../components/AddTask.vue";
import BgCover from "../components/BgCover.vue";

//添加任务弹窗
let AddTaskFlag = ref(false);
let showCoverFlag = ref(false);

function OpenAddTask() {
    AddTaskFlag.value = true;
    showCoverFlag.value = true;
    document.body.style.overflow = "hidden";
}
function closeAddTask() {
    AddTaskFlag.value = false;
    showCoverFlag.value = false;
    document.body.style.overflow = "auto";
}
</script>

<style scoped lang="scss">
.addtask-box {
    z-index: 99;
    top: 300px;
}

</style>

二、quasar 方法

利用quasar dialog组件的 persistent 属性。

代码:

<template>
    <div class="column" style="width: 25px">
        <q-btn v-for="n in 12" round :color="'teal-' + n" icon="add" class="q-ma-lg" />
    </div>
    <q-btn round color="primary" icon="add" size="24px" class="fixed-bottom-right q-ma-lg" @click="OpenAddTask()"
        @closeAddTask="closeAddTask" />

    <q-dialog v-model="AddTaskFlag" persistent>
        <AddTask :showAddTask.sync="AddTaskFlag" class="addtask-box" @closeAddTask="closeAddTask"></AddTask>
    </q-dialog>

</template>

<script setup>
import { ref } from "vue";
import AddTask from "../components/AddTask.vue";

//添加任务弹窗
let AddTaskFlag = ref(false);

function OpenAddTask() {
    AddTaskFlag.value = true;
}
function closeAddTask() {
    AddTaskFlag.value = false;
}
</script>

<style scoped lang="scss">
.addtask-box {
    z-index: 99;
    top: 300px;
}
</style>

到此这篇关于vue3点击出现弹窗后背景变暗且不可操作的实现代码的文章就介绍到这了,更多相关vue点击出现弹窗背景变暗内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue实现面包屑的方法

    vue实现面包屑的方法

    这篇文章主要为大家详细介绍了vue实现面包屑的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue3+ts+element-plus实际开发之统一调用弹窗封装的详细过程

    vue3+ts+element-plus实际开发之统一调用弹窗封装的详细过程

    这篇文章主要介绍了vue3+ts+element-plus实际开发之统一调用弹窗封装的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • 详细解读VUE父子组件的使用

    详细解读VUE父子组件的使用

    这篇文章主要介绍了详细解读VUE父子组件的使用,今天来讲一种子父组件深度耦合的方式,使我们不用额外的创建新的组件,也可以达到一些效果,下面与你们分享一下
    2023-05-05
  • 在vue3项目中给页面添加水印的实现方法

    在vue3项目中给页面添加水印的实现方法

    这篇文章主要给大家介绍一下在vue3项目中添加水印的实现方法,文中有详细的代码示例供大家参考,具有一定的参考价值,感兴趣的小伙伴跟着小编一起来看看吧
    2023-08-08
  • vue2从数据变化到视图变化发布订阅模式详解

    vue2从数据变化到视图变化发布订阅模式详解

    这篇文章主要为大家介绍了vue2从数据变化到视图变化发布订阅模式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • vue+element加入签名效果(移动端可用)

    vue+element加入签名效果(移动端可用)

    这篇文章主要介绍了vue+element加入签名效果(移动端),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • vue cli3.x打包后如何修改生成的静态资源的目录和路径

    vue cli3.x打包后如何修改生成的静态资源的目录和路径

    这篇文章主要介绍了vue cli3.x打包后如何修改生成的静态资源的目录和路径,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue3中的对象时为proxy对象如何获取值(两种方式)

    vue3中的对象时为proxy对象如何获取值(两种方式)

    使用vue3.0时,因为底层是使用proxy进行代理的所以当我们打印一些值得时候是proxy代理之后的是Proxy<BR>对象,Proxy对象里边的[[Target]]才是真实的对象,那么如何获取这个值呢,下面下面给大家介绍两种方式,感兴趣的朋友一起看看吧
    2023-01-01
  • elementui el-calendar日历组件使用示例

    elementui el-calendar日历组件使用示例

    这篇文章主要为大家介绍了elementui el-calendar日历组件使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • FastApi+Vue+LayUI实现前后端分离的示例代码

    FastApi+Vue+LayUI实现前后端分离的示例代码

    本文主要介绍了FastApi+Vue+LayUI实现前后端分离的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论