请看以下完整攻略。
请看以下完整攻略。
背景
在做弹窗时,通常会有蒙层的效果,以防止用户误点击背景操作。但是,这时候出现了一个问题,就是在弹窗出现的时候,蒙层底部的页面也跟着滚动了。影响了用户体验。因此,需要解决这个问题。
解决方案
在这里提供几种解决方案,可以根据实际情况选择其中一种或多种方法。
方案一:禁止body滚动
body {
overflow: hidden;
}
这种方法是通过对body标签设置CSS样式,来实现禁止body滚动,从而解决底部页面跟随滚动的问题。但是,需要注意的是,当弹出层消失时,需要把禁止滚动的CSS样式去掉。
示例代码:
var modal = document.getElementById("modal"); // 获取弹出层
var body = document.getElementsByTagName("body")[0]; // 获取body
function showModal() {
modal.style.display = "block"; // 弹出层显示
body.style.overflow = "hidden"; // body滚动禁止
}
function hideModal() {
modal.style.display = "none"; // 弹出层隐藏
body.style.overflow = "auto"; // body滚动恢复
}
方案二:滚动距离补偿
在蒙层上覆盖一个高度和整个页面一样的div,用来实现滚动距离的补偿。同时,还需要禁止蒙层的滚动事件。
示例代码:
<div id="scroll-compensate"></div><!-- 补偿div -->
<div id="modal"></div><!-- 弹出层 -->
#scroll-compensate {
position: absolute;
z-index: -1;
width: 100%;
height: 0;
top: 0;
left: 0;
}
var modal = document.getElementById("modal"); // 获取弹出层
var compensate = document.getElementById("scroll-compensate"); // 获取补偿div
function showModal() {
modal.style.display = "block"; // 弹出层显示
document.body.style.overflow = "hidden"; // 禁止整个页面滚动
compensate.style.height = document.documentElement.clientHeight + "px"; // 设置补偿div高度
}
function hideModal() {
modal.style.display = "none"; // 弹出层隐藏
document.body.style.overflow = "auto"; // 恢复整个页面滚动
compensate.style.height = 0; // 设置补偿div高度为0
}
以上就是两种解决方案的示例代码,可以根据实际情况选择其中一种或者多种方法进行使用。
总结
通过以上两种方式,可以解决弹出层出现时底部页面跟随滚动的问题。具体使用时,可以根据实际情况选择其中一种或者多种方案。
沃梦达教程
本文标题为:禁止弹窗中蒙层底部页面跟随滚动的几种方法
猜你喜欢
- ajax中设置contentType: "application/json"的作用 2023-02-15
- js控制div弹出层实现方法 2023-12-24
- 下载highlightjs-copy-button.js给网站代码加上copy复制按钮 2023-08-29
- 利用Blob进行文件上传的完整步骤 2023-12-23
- vue中的条件渲染 v-show、v-if、v-else、v-else-if 2023-10-08
- position:sticky 粘性定位的几种巧妙应用详解 2023-12-14
- 在HTML 5 / Javascript中批量插入客户端数据库(WEB SQL) 2023-10-26
- 基于HTML5的可预览多图片Ajax上传 2023-01-20
- 妙用z-index让一个div显示在最前面 2023-12-14
- axios基本用法教程示例详解 2023-07-09