Element UI组件Dialog显示闪动问题【解决方案】

在ElementUI中,el-dialog弹窗确实有时会导致页面出现抖动或闪动的问题。这通常是由于弹窗出现时对页面布局的影响,特别是滚动条的出现或消失,导致了页面的重新布局和渲染。以下是一些解决或缓解这一问题的方法:

解决方案

1. 关闭Dialog的滚动条锁定

ElementUI的el-dialog组件在打开时默认会锁定页面的滚动条,这有时会导致页面布局的变化,从而产生抖动。你可以通过设置lockScroll属性为false来关闭这一功能:

全局设置:在main.js中配置ElementUI的Dialog组件的默认属性,添加ElementUI.Dialog.props.lockScroll.default= false; 。 局部设置:在el-dialog标签上直接添加:lockScroll="false"属性。

2. 修改CSS样式

有时,页面的抖动可能是由于CSS样式的不当设置导致的。你可以尝试修改相关的CSS样式来解决这个问题:

重置padding-right:当el-dialog打开时,ElementUI会给body元素添加一个padding-right样式,以防止内容在滚动条消失时溢出。你可以尝试在全局或局部样式中重置这个padding-right值,例如:.el-popup-parent–hidden
{ padding-right: 0px !important; }。
防止页面抖动:有时页面的抖动是由于滚动条的突然出现或消失导致的。你可以尝试在body元素上添加一些样式来防止这种情况的发生,例如:在弹窗打开时设置body的overflow为hidden,在弹窗关闭时恢复

在这里插入图片描述

### 实现 `el-upload` 组件上传后的文件预览和回显 为了实现 `el-upload` 组件在 Vue 和 Element UI 中的文件上传后预览和回显功能,可以按照如下方法配置: #### 配置 `el-upload` 组件属性 通过设置 `action` 属性指定服务器端接收上传请求的 URL 地址。对于视频或其他类型的文件,确保该地址能够处理不同 MIME 类型的数据。 ```html <template> <div class="upload-demo"> <el-upload :headers="{'Authorization': token}" action="/api/upload" list-type="picture-card" :on-preview="handlePreview" :on-remove="handleRemove" :before-upload="beforeUpload" :file-list="fileList" multiple> <i slot="default" class="el-icon-plus"></i> </el-upload> <!-- 对于非图片类文件 --> <el-dialog :visible.sync="dialogVisible"> <img width="100%" v-if="isImage" :src="dialogImageUrl" alt=""> <video controls autoplay v-else><source :src="dialogVideoUrl" type="video/mp4">您的浏览器不支持 video 标签。</video> </el-dialog> </div> </template> <script> export default { data() { return { fileList: [], // 存储已上传成功的文件列表 dialogVisible: false, isImage: true, dialogImageUrl: '', dialogVideoUrl: '' }; }, methods: { handlePreview(file) { this.dialogVisible = true; if (['image/jpeg', 'image/png'].includes(file.type)) { this.isImage = true; this.dialogImageUrl = file.url || file.raw; } else if (file.type === 'video/mp4') { this.isImage = false; this.dialogVideoUrl = file.url || file.raw; } }, beforeUpload(file) { const isValidType = ['image/jpeg', 'image/png', 'video/mp4'].indexOf(file.type) !== -1; if (!isValidType) { this.$message.error('仅允许上传JPEG/PNG图片或MP4格式视频'); } return isValidType; }, handleRemove(file, fileList) {} } }; </script> ``` 上述代码片段展示了如何利用 `el-upload` 的钩子函数来控制不同类型文件(如图像和视频)的显示逻辑[^3]。 #### 处理页面闪动问题使用 `file-list` 属性可能会遇到页面闪烁的情况,可以通过自定义 CSS 来隐藏正在准备上传或正在进行中的项直到它们完成加载再显示出来: ```css <style lang="scss" scoped> ::v-deep .el-upload-list__item.is-ready, ::v-deep .el-upload-list__item.is-uploading { display: none !important; } </style> ``` 这段样式规则会使得处于预备状态(`is-ready`)或是传输过程中的项目不可见,从而减少视觉上的干扰[^2]. #### 获取 Token 并传递给 Header 如果 API 接口需要身份验证,则可以在发起 HTTP 请求之前加入认证信息到头部字段中去。这里假设是从本地存储读取名为 "token" 的 cookie 值作为凭证[^4]: ```javascript import { getToken } from '@/utils/auth'; // 将此部分添加至 script 节点内的 data 函数里 data(){ return{ ... token:getToken(), } }, ``` 这样做的目的是为了让每次发送出去的 POST 请求都携带有效的授权令牌以便顺利访问受保护资源接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端成长营

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值