【奇葩问题】vue 多个el-drawer 嵌套遮罩混乱问题解决方案,vue在<el-drawer>中嵌套<el-drawer>时遮罩bug 为了解决问题自己封装了一个简易的抽屉组件

简介: 【奇葩问题】vue 多个el-drawer 嵌套遮罩混乱问题解决方案,vue在<el-drawer>中嵌套<el-drawer>时遮罩bug 为了解决问题自己封装了一个简易的抽屉组件

背景:vue项目中多个el-drawer抽屉组件嵌套官方自带遮罩层出现顺序混乱的bug

使用了官方自带类 :append-to-body=“true” :modal-append-to-body=“false” 都无法解决后

自己定义了一个组件,虽然简陋但是解决了问题


最终展示效果

解决方案

使用:modal="false"将官方自带遮罩层关闭,在将el-drawer设置背景色,实现效果与官方一至

组件调用源码

<jw-drawer @change="change_data" :withheader="true" v-if="dialogVisible" :drawer='dialogVisible'
            size="60%" :title="dialogtitle">
            
</jw-drawer>

组件源码

<template>
    <el-drawer :title="title" :visible.sync="drawer_show" :with-header="withheader" :size="size"
    
    direction="rtl" :before-close="handleClose" :style="{ right: (left==0 ? '0px':left) }" class="jwdranwer" :modal="false">
        <div class="eldrawerbody " :style="{ width: size, position: 'fixed', height: '100%' }">
            <el-button class="el_drawer_button" type="primary" icon="el-icon-close" @click="close"></el-button>
            <div class="help">
                <slot />

            </div>
        </div>

    </el-drawer>

   
</template> 
<script>
export default {
    name: 'JwDrawer',
    props: {
        title: {
            type: String,
            default: '',
        },
        size: {
            type: String,
            default: '50%',
        },
        left: {
            type: String,
            default: '0',
        },
        drawer: {
            type: Boolean,
            default: false,
        },
        withheader: {
            type: Boolean,
            default: false,
        },

    },
    data() {
        return {
            drawer_show: false
        };
    },
    created() {
        if (this.left != '0') {
                this.left = 'calc(' + this.left + ' - 350px)'
            }
        this.drawershow()
    },
    methods: {
        drawershow() {

            
            this.drawer_show = this.drawer;
        },
        handleClose(done) {
            this.$confirm('确认关闭?')
                .then(_ => {
                    this.drawer_show = false;
                    this.$emit('change', false)
                })
                .catch(_ => { })
        },
        close() {
            this.$confirm('确认关闭?')
                .then(_ => {
                    this.drawer_show = false;
                    this.$emit('change', false)
                })
                .catch(_ => { })

        }
    }
}
</script>
<style lang="scss" scoped>
.jwdranwer{
    background: rgba(1,1,1,0.5)
}
.help {
    height: calc(100% - 40px);

    .el-form {
        height: calc(100% - 60px);
        overflow: auto;
        padding: 30px;
    }
}

.el_drawer_button {
    padding: 5px;
    border-radius: 5px 0 0 5px;
    position: absolute;
    left: -36px;
    border: 0;
    top: 10%;

    ::v-deep i {
        font-size: 26px;
    }
}
</style>
目录
相关文章
|
26天前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
104 4
|
6天前
|
人工智能 自然语言处理 JavaScript
用 CodeBuddy 搭建Vue框架 像呼吸一样简单
本文介绍如何借助 CodeBuddy 快速创建 Vue 项目。CodeBuddy 是一款支持自然语言编程的工具,能根据用户需求自动生成代码,降低开发门槛。文章详细说明了通过 CodeBuddy 创建 Vue 项目的步骤,包括解决项目创建失败的问题、自动补全代码功能以及启动开发服务器的方法。无论开发者经验如何,CodeBuddy 都能显著提升效率,让开发更专注创意实现。
|
17天前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
|
16天前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
2月前
|
SQL JavaScript 前端开发
Vue实现动态数据透视表(交叉表)
Vue实现动态数据透视表(交叉表)
185 13
|
5月前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
233 1
|
2月前
|
JavaScript 前端开发 算法
vue渲染页面的原理
vue渲染页面的原理
139 56
|
2月前
|
数据采集 资源调度 JavaScript
极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图
本文介绍了使用 Vue Flow 绘制流程图的方法与技巧。Vue Flow 是一个灵活强大的工具,适合自定义复杂的流程图。文章从环境要求(Node.js v20+ 和 Vue 3.3+)、基础入门案例、自定义功能(节点与连线的定制、事件处理)到实际案例全面解析其用法。重点强调了 Vue Flow 的高度灵活性,虽然预定义内容较少,但提供了丰富的 API 支持深度定制。同时,文中还分享了关于句柄(handles)的使用方法,以及如何解决官网复杂案例无法运行的问题。最后通过对比 mermaid,总结 Vue Flow 更适合需要高度自定义和复杂需求的场景,并附带多个相关技术博客链接供进一步学习。
|
2月前
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
3月前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。