JavaScrpit如何实现弹出遮罩层后将页面固定到当前位置且无法继续滚动

简介: JavaScrpit如何实现弹出遮罩层后将页面固定到当前位置且无法继续滚动

1.首先呢我们需要创建html结构和css操作,如下所示:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <style>
    .mask {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background-color: rgba(0, 0, 0, 0.5);
      display: none;
    }
    .content {
      position: relative;
      z-index: 999;
    }
  </style>
</head>
<body>
  <div class="mask"></div>
  <div class="content">
        //这里是内容区
  </div>
</body>
</html>


2.接下来呢我们需要使用js来控制遮罩层的显示隐藏以及页面的滚动行为,如下所示:

// 获取遮罩层和内容容器元素
const mask = document.querySelector('.mask');
const content = document.querySelector('.content');
// 显示遮罩层并禁止页面滚动
function showMask() {
  // 添加样式使遮罩层显示
  mask.style.display = 'block';
  // 计算滚动条的偏移量
  const scrollY = window.scrollY;
  // 设置内容容器的样式,固定在当前位置
  content.style.top = `-${scrollY}px`;
  // 禁止页面滚动
  document.body.style.overflow = 'hidden';
}
// 隐藏遮罩层并允许页面滚动
function hideMask() {
  // 移除遮罩层的显示样式
  mask.style.display = 'none';
  // 获取之前保存的滚动条偏移量
  const scrollY = parseInt(content.style.top.replace('-', ''));
  // 恢复页面滚动
  document.body.style.overflow = '';
  // 恢复滚动条的偏移量
  window.scrollTo(0, scrollY);
}
// 绑定事件,点击遮罩层时隐藏遮罩层
mask.addEventListener('click', hideMask);
// 使用示例:
// 调用showMask()函数显示遮罩层
// 调用hideMask()函数隐藏遮罩层


showMask()函数用于显示遮罩层,它会将遮罩层的display属性设置为block以显示遮罩,并且计算当前页面滚动的偏移量,将内容容器的top属性设置为负值,

使其固定在当前位置。同时,禁止页面滚动通过将document.bodyoverflow属性设置为hidden来实现。

hideMask()函数则用于隐藏遮罩层,它会将遮罩层的display属性设置为none以隐藏遮罩,并且获取之前保存的滚动条偏移量,重新设置页面滚动和滚动条偏移量,恢复页面的正常滚动行为。


最后,通过给遮罩层添加点击事件监听器,当用户点击遮罩层时,调用hideMask()函数来隐藏遮罩层,以上就是整个代码逻辑的实现过程

目录
相关文章
|
开发工具 Android开发 数据安全/隐私保护
Cocos Creator Android 平台 Facebook 原生登录(一)
Cocos Creator Android 平台 Facebook 原生登录
1012 0
|
10月前
|
缓存 搜索推荐 Apache
301/302重定向全面指南:从原理到实践
HTTP重定向是Web开发中常用技术,301和302状态码用于不同场景。301表示资源永久迁移,适用于域名更换或结构调整,搜索引擎会更新链接并传递权重;302为临时跳转,适用于登录后跳转或短链接服务,不更改原页面权重。二者在缓存、SEO影响及请求方法处理上存在显著差异。合理配置服务器(如Apache、Nginx或IIS)并遵循最佳实践,有助于提升用户体验与网站SEO表现。
2034 0
|
10月前
|
机器学习/深度学习 算法 PyTorch
从零开始200行python代码实现LLM
本文从零开始用Python实现了一个极简但完整的大语言模型,帮助读者理解LLM的工作原理。首先通过传统方法构建了一个诗词生成器,利用字符间的概率关系递归生成文本。接着引入PyTorch框架,逐步重构代码,实现了一个真正的Bigram模型。文中详细解释了词汇表(tokenizer)、张量(Tensor)、反向传播、梯度下降等关键概念,并展示了如何用Embedding层和线性层搭建模型。最终实现了babyGPT_v1.py,一个能生成类似诗词的简单语言模型。下一篇文章将在此基础上实现自注意力机制和完整的GPT模型。
608 14
从零开始200行python代码实现LLM
|
7月前
|
存储 人工智能 安全
企业级 AI Agent 开发指南:基于函数计算 FC Sandbox 方案实现类 Chat Coding AI Agent
通过 Sandbox 与 Serverless 的深度融合,AI Agent 不再是“黑盒”实验,而是可被企业精准掌控的生产力工具。这种架构不仅适配当前 AI Agent 的动态交互特性,更为未来多模态 Agent、跨系统协作等复杂场景提供了可复用的技术底座。若您的企业正面临 AI Agent 规模化落地的挑战,不妨从 Sandbox 架构入手,结合函数计算 FC 的能力,快速验证并构建安全、高效、可扩展的 AI 应用系统。
|
9月前
|
人工智能 自然语言处理 API
AI-Compass Agent智能体技术生态:整合AutoGPT、LangGraph、CrewAI等前沿框架,构建自主决策工具调用的AI智能体系统
AI-Compass Agent智能体技术生态:整合AutoGPT、LangGraph、CrewAI等前沿框架,构建自主决策工具调用的AI智能体系统
|
11月前
|
人工智能 编解码 测试技术
云电脑显卡性能终极对决:ToDesk云电脑/顺网云/海马云,谁才是4K游戏之王?
本文对比了ToDesk云电脑、顺网云和海马云三大平台的性能表现,涵盖游戏实战与AI模型测试。ToDesk云电脑搭载RTX 5090显卡,在4K游戏与大模型支持上表现卓越;顺网云适合中轻度游戏玩家,强调即开即用的便捷性;海马云面向企业用户,提供稳定算力与多任务支持。评测从显卡、处理器、压力测试到网络传输技术全面展开,最终推荐:硬核玩家首选ToDesk云电脑,内容创作者可选ToDesk云电脑或海马云,企业用户则更适合海马云。
2468 23
|
存储 安全 固态存储
计算机启动:从插上电源到操作系统启动的全过程
当我们插上电源,计算机从休眠状态苏醒,直至操作系统完全启动,这一系列复杂的过程涉及到硬件和软件的多个层面。本文将详细解析计算机插上电源后操作系统所做的工作,揭示这一过程的技术细节。
1121 6
|
监控 网络协议 Linux
彻底解密:select,poll底层系统调用的核心思想原理
彻底解密:select,poll底层系统调用的核心思想原理
下一篇
开通oss服务