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()函数来隐藏遮罩层,以上就是整个代码逻辑的实现过程

目录
相关文章
|
7月前
【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置
【实现手机端上滑滚动加载列表】判断页面是否滚动到底部或者指定元素位置
|
7月前
|
Windows
Keil5中恢复默认布局-解决左边栏,底部栏位置不是默认布局
Keil5中恢复默认布局-解决左边栏,底部栏位置不是默认布局
683 0
|
7月前
|
小程序 JavaScript
小程序自定义弹窗禁止底部内容滚动(滚动穿透问题)
小程序自定义弹窗禁止底部内容滚动(滚动穿透问题)
993 0
|
4月前
|
前端开发 JavaScript
基于Vue3实现鼠标按下某个元素进行拖动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能
本文介绍了如何在Vue3项目中实现一个鼠标拖动调整元素宽度的功能,并展示了点击按钮收起或展开侧边栏的效果,提供了完整的实现代码和操作演示。
835 0
基于Vue3实现鼠标按下某个元素进行拖动,实时改变左侧或右侧元素的宽度,以及点击收起或展开的功能
|
5月前
|
JavaScript
vue 组件封装 | s-fullpage 全屏滚动 (内含绑定鼠标滑轮滚动事件、避免鼠标滑轮连续滚动、滑动过渡动画等实用技巧)
vue 组件封装 | s-fullpage 全屏滚动 (内含绑定鼠标滑轮滚动事件、避免鼠标滑轮连续滚动、滑动过渡动画等实用技巧)
130 4
vitepress如何配置右上角的小两侧标志,利用nav标签进行修改,右侧边栏如何设置成自动弹出水平框,让原先隐藏的框能够显示出来
vitepress如何配置右上角的小两侧标志,利用nav标签进行修改,右侧边栏如何设置成自动弹出水平框,让原先隐藏的框能够显示出来
|
5月前
|
JavaScript 前端开发
vue 页面下滚到目标元素的位置,目标元素自动吸顶(自动悬浮吸附到页面顶部)
vue 页面下滚到目标元素的位置,目标元素自动吸顶(自动悬浮吸附到页面顶部)
382 0
|
7月前
在viewWillAppear函数中禁止左滑,viewWillDisappear开启左滑动产生进入下一个页面来回滑动造成无法点击点击按钮问题
在viewWillAppear函数中禁止左滑,viewWillDisappear开启左滑动产生进入下一个页面来回滑动造成无法点击点击按钮问题
39 0
uniapp滚动条置顶效果、自定义页面滚动条的位置(整理)
uniapp滚动条置顶效果、自定义页面滚动条的位置(整理)