v-loading 对滚动轴部分遮盖不全
问题场景
给有滚动轴的盒子添加了 v-loading 遮罩层,但发现:当盒子内容滚动到底部,刷新页面时,遮罩层无法覆盖盒子底部的区域。如下图所示:

模板代码
<div class="content" v-loading="defLoading">
<el-form class="form">
<!-- 此处代码省略 -->
</el-form>
</div>
scss scoped 样式代码
.content {
padding: 15px;
height: calc(75vh - 120px);
overflow: auto;
.form {
max-height: calc(100vh - 300px);
overflow: auto;
}
}
分析
遮罩层的起点位置是滚动内容最顶部,高度是 content 盒子的高度。当滚动轴滚动到盒子底部时,就会出现一段未被遮罩的区域。如下图所示:

尝试
- 去掉
content盒子的overflow: auto样式,刷新时遮罩不全的问题解决了,但是滚动轴也没了,无法显示表单底部内容。 - 给
content盒子添加样式display: table,也会导致滚动轴消失。
解决
方案一:给 content 盒子用 <div v-loading="defLoading"></div> 包裹起来。就能解决遮罩不全的问题,也能保留滚动轴。
<div v-loading="defLoading">
<div class="content" v-loading="defLoading">
<el-form class="form">
<!-- 此处代码省略 -->
</el-form>
</div>
</div>
方案二(推荐):给 v-loading 添加 .body 修饰符。
<div class="content" v-loading.body="defLoading">
<el-form class="form">
<!-- 此处代码省略 -->
</el-form>
</div>
v-loding 的修饰符


参考链接
本文来自博客园,作者:shayloyuki,转载请注明原文链接:https://www.cnblogs.com/shayloyuki/p/17867787.html
posted on 2023-11-30 16:59 shayloyuki 阅读(1152) 评论(0) 收藏 举报
浙公网安备 33010602011771号