请看以下完整攻略。
请看以下完整攻略。
背景
在做弹窗时,通常会有蒙层的效果,以防止用户误点击背景操作。但是,这时候出现了一个问题,就是在弹窗出现的时候,蒙层底部的页面也跟着滚动了。影响了用户体验。因此,需要解决这个问题。
解决方案
在这里提供几种解决方案,可以根据实际情况选择其中一种或多种方法。
方案一:禁止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 动态载入html页面后不能执行其中的js快速解决方法 2023-02-14
- javascript-在属性内存储HTML 2023-10-25
- 自己写一个uniapp全局弹窗(APP端) 2023-12-21
- vue cli4.0 快速搭建项目详解 2023-10-08
- layer.open+iframe页窗口=在父页面调用iframe子页面函数 2022-10-05
- 前端获取http状态码400的返回值实例 2022-11-16
- 微信小程序自定义用户登录弹窗 2023-12-20
- VuePress 2023-10-08
- php – 将mySQL记录显示为HTML表格列 2023-10-26
- html css将表头固定的最直接的方法 2023-12-12