蒙层禁止页面滚动

news/2025/3/15 21:14:22/

学习链接:蒙层禁止页面滚动的方案

在这里插入图片描述

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>蒙层禁止页面滚动的方案</title><style type="text/css">#mask{position: fixed;height: 100vh;width: 100vw;background: rgba(0, 0, 0, 0.6);top: 0;left: 0;display: flex;align-items: center;justify-content: center;}.hide{display: none !important;}.long-content > div{height: 300px;}.mask-content{width: 300px;height: 100px;overflow-x: auto;background: #fff;}.mask-content > div{height: 300px;}</style>
</head>
<body><div class="long-content"><div>long content</div><div>long content</div><div>long content</div><button id="btn">弹窗</button><div>long content</div><div>long content</div><div>long content</div><div>long content</div></div><div id="mask" class="hide"><div class="mask-content"><div>mask-content</div><div>mask-content</div><div>mask-content</div><div>mask-content</div><div>mask-content</div><div>mask-content</div><div>mask-content</div><div>mask-content</div><div>mask-content</div></div></div>
</body><script type="text/javascript">(() => {const btn = document.getElementById("btn");const mask = document.getElementById("mask");const maskContent = document.querySelector(".mask-content");const body = document.body;let documentTop = 0; // 记录按下按钮时的 `top`/* 按钮点击时: 1. 给mask添加display:none; 2. 记录此时页面被卷去的高度(记录滚动位置)3. 给body加上fixed固定定位(此时,如果不做任何处理,页面会立即滚动到top:0的位置); 4. 将页面滚动到之前记录的位置(恢复弹窗前的位置)*/btn.addEventListener("click", e => {mask.classList.remove("hide");documentTop = document.scrollingElement.scrollTop;body.style.position = "fixed"body.style.top = -documentTop + "px";})/* 点击蒙层时: 1. 给mask添加hide样式类, 让mask的display为none2. 恢复body的默认定位(此时,如果不做任何处理,页面又会立即滚动到top:0的位置)3. 将页面滚动到之前记录的位置(恢复弹窗前的位置)*/mask.addEventListener("click", e => {mask.classList.add("hide");body.style.position = "static";body.style.top = "auto";document.scrollingElement.scrollTop = documentTop;})/* 阻止事件冒泡, 防止点击弹框中的内容时, 也把弹框关闭了 */maskContent.addEventListener('click',(e) => {e.stopPropagation();})})();</script>
</html>

http://www.ppmy.cn/news/48188.html

相关文章

IMX6ULL---Yocto制作U-Boot

目录 1. U-Boot源码下载 2.增加U-Boot Recipe 3.修改U-Boot Recipe 4.编译U-Boot 5.U-Boot移植(EMMC版)

探讨接口测试颗粒度

偶然间在论坛上看到一个帖子&#xff0c;帖子内容如下&#xff1a; 假设现在有一个新增商品的接口&#xff0c;返回的参数中有新增商品的 id&#xff08;每次返回的 id 都不一样&#xff09;、success&#xff08;判断是否成功&#xff0c;0 失败 1 成功&#xff09; 1. 接口…

qt属性系统简介( Q_PROPERTY)

1、属性定义 Qt 提供一个 Q_PROPERTY()宏可以定义属性&#xff0c;它也是基于元对象系统实现的。Qt 的属性系统与C编译器无关&#xff0c;可以用任何标准的 C编译器编译定义了属性的 Qt C程序。 在QObiect 的子类中&#xff0c;用宏Q_PROPERTY()定义属性&#xff0c;其使用格式…

【Python_Scrapy学习笔记(十)】基于Scrapy框架的下载器中间件创建代理IP池

基于Scrapy框架的下载器中间件创建代理IP池 前言 本文中介绍 如何基于 Scrapy 框架的下载器中间件创建代理IP池。 正文 1、添加中间件的流程 在 middlewares.py 中新建 代理IP 中间件类在 settings.py 中添加此下载器中间件&#xff0c;设置优先级并开启 2、基于Scrapy框…

汽车基础软件信息安全与AUTOSAR

AUTOSAR 信息安全框架和关键技术分析 随着汽车网联化和智能化,汽车不再孤立,越来越多地融入到互联网中。在这同时,汽车也慢慢成为潜在的网络攻击目标,汽车的网络安全已成为汽车安全的基础,受到越来越多的关注和重视。AUTOSAR 作为目前全球范围普遍认可的汽车嵌入式软件架…

[线上故障][坑] spring的自动装配和事务不生效

哪些年的故障 spring自动装备 方案1 <context:annotation-config scan/ > autowired byType Qulified Resource byName 不建议, 二选一, 自动选择同名的. Autowired与Resource异同&#xff1a; 1、Autowired与Resource都可以用来装配bean。都可以写在字段上&#x…

CAS操作实际上包含了哪两个步骤?

目录 先讲原理&#xff1a; 再深入CAS规则&#xff1a; 问题&#xff1a;第一步是否应该是修改预期值&#xff1f; 总结一下&#xff1a; 先讲原理&#xff1a; CAS的全称是Compare And Swap&#xff08;比较并交换&#xff09;&#xff0c;是一种原子操作&#xff0c;通常…

zookeeper 单机环境搭建(三)

下载地址&#xff1a;Index of /dist/zookeeper 1.新建目录/home/yy/tools/zookeeper&#xff0c;将下载好的apache-zookeeper-3.8.0-bin.tar拷进/home/yy/tools目录。 2.解压zk tar –zxvf apache-zookeeper-3.8.0-bin.tar j3. cd到解压后的zk路径下&#xff0c; 将解压后…