请看以下完整攻略。
请看以下完整攻略。
背景
在做弹窗时,通常会有蒙层的效果,以防止用户误点击背景操作。但是,这时候出现了一个问题,就是在弹窗出现的时候,蒙层底部的页面也跟着滚动了。影响了用户体验。因此,需要解决这个问题。
解决方案
在这里提供几种解决方案,可以根据实际情况选择其中一种或多种方法。
方案一:禁止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
}
以上就是两种解决方案的示例代码,可以根据实际情况选择其中一种或者多种方法进行使用。
总结
通过以上两种方式,可以解决弹出层出现时底部页面跟随滚动的问题。具体使用时,可以根据实际情况选择其中一种或者多种方案。
沃梦达教程
本文标题为:禁止弹窗中蒙层底部页面跟随滚动的几种方法
基础教程推荐
猜你喜欢
- 利用相对定位及偏移量做精美输入界面 2022-10-16
- php – 显示从数据库中提取的数据,基于html表单输入并在html页面中显示 2023-10-27
- 使用div+CSS将页脚始终控制在页面最下方的方法 2023-12-23
- 解析Clipboard API剪贴板操作实例 2024-01-05
- 在vue中怎么分享到空间,微博,朋友圈 2023-10-08
- 详谈ajax返回数据成功 却进入error的方法 2023-02-23
- php – 在MySQL中存储html的100%安全方式 2023-10-26
- HTML5:近代史复习网页 2023-10-28
- 浅谈Ajax和JavaScript的区别 2023-01-20
- mint-ui如何自定义messageBox样式 2023-07-10