js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)

下面我会详细讲解“js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)”的完整攻略。

1. 实现思路

首先,要实现遮罩居中弹出层,我们需要使用CSS实现弹出层的样式,用JS实现弹出层的位置和滚动条滚动的效果。具体步骤如下:

  1. 定义一个遮罩层的样式mask,设置background为半透明的黑色,并将它的z-index设为比页面上其他元素的z-index要高。
  2. 定义一个弹出层的样式dialog,设置positionfixedlefttop都为50%,即把它放在屏幕的中央位置。
  3. 使用JavaScript为弹出层定位,通过offsetWidthoffsetHeight获取弹出层的宽度和高度。同时,使用scrollHeightscrollTop可以获取页面的滚动高度。这样就可以让弹出层跟着页面滚动条滚动。

2. 示例说明

示例一

我们以一个简单的登录框为例,来演示如何实现遮罩居中弹出层。

<!-- HTML代码 -->
<button id="showBtn">显示登录框</button>
<div id="mask"></div>
<div id="dialog">
  <h3>登录</h3>
  <form>
    <label>用户名:</label>
    <input type="text" name="username">
    <br>
    <label>密码:</label>
    <input type="password" name="password">
    <br>
    <button type="submit">登录</button>
  </form>
</div>
/* CSS代码 */
#mask {
  display:none;
  position:fixed;
  top:0;
  left:0;
  z-index:9999;
  background:rgba(0,0,0,0.5); 
}

#dialog {
  display:none;
  position:fixed;
  top:50%;
  left:50%;
  transform: translate(-50%,-50%);
  width:300px;
  height:200px;
  z-index:10000;
  background-color:#fff;
  padding:20px;
  border-radius: 10px;
  box-shadow: 0 0 10px rgba(0,0,0,0.5);
  text-align:center;
}
// JavaScript代码
window.onload = function() {
  var showBtn = document.getElementById('showBtn');
  var dialog = document.getElementById('dialog');
  var mask = document.getElementById('mask');

  // 显示登录框
  showBtn.onclick = function() {
    mask.style.display = 'block';
    dialog.style.display = 'block';

    // 让弹出层居中
    dialog.style.marginTop = -dialog.offsetHeight/2 + 'px';
    dialog.style.marginLeft = -dialog.offsetWidth/2 + 'px';

    // 监听窗口大小改变事件,重新居中
    window.onresize = function() {
      dialog.style.marginTop = -dialog.offsetHeight/2 + 'px';
      dialog.style.marginLeft = -dialog.offsetWidth/2 + 'px';
    }

    // 监听滚动条滚动事件,让弹出层跟随滚动
    window.onscroll = function() {
      dialog.style.top = document.documentElement.scrollTop + document.documentElement.clientHeight/2 - dialog.offsetHeight/2 + 'px';
    }
  }

  // 隐藏登录框
  mask.onclick = function() {
    mask.style.display = 'none';
    dialog.style.display = 'none';
  }
}

在示例一中,我们首先定义了一个登录框的HTML代码,并使用CSS样式设置了弹出层的样式和遮罩层的样式。然后,我们使用JS实现了弹出层的居中定位及跟随滚动。最后,我们通过监听点击事件实现了点击遮罩层隐藏登录框。

示例二

下面,我们再以一个图片展示为例,来演示如何实现遮罩居中弹出层。

<!-- HTML代码 -->
<div class="container">
  <img src="https://picsum.photos/id/237/200/300" alt="图片" class="img">
  <div class="mask"></div>
  <div class="dialog">
    <img src="https://picsum.photos/id/237/400/600" alt="大图" class="big-img">
  </div>
</div>
/* CSS代码 */
.container {
  position:relative;
  margin:0 auto;
  width:200px;
  height:300px;
}

.img {
  width:100%;
  height:100%;
}

.mask {
  display:none;
  position:absolute;
  top:0;
  left:0;
  z-index:999;
  background:rgba(0,0,0,0.5); 
  width:100%;
  height:100%;
}

.dialog {
  display:none;
  position:fixed;
  top:50%;
  left:50%;
  transform: translate(-50%,-50%);
  z-index:1000;
}

.big-img {
  display:block;
  max-width:80%;
  max-height:80%;
}
// JavaScript代码
window.onload = function() {
  var img = document.querySelector('.img');
  var dialog = document.querySelector('.dialog');
  var mask = document.querySelector('.mask');
  var bigImg = document.querySelector('.big-img');

  // 显示大图
  img.onclick = function() {
    mask.style.display = 'block';
    dialog.style.display = 'block';
    bigImg.src = img.src;
  }

  // 隐藏大图
  mask.onclick = function() {
    mask.style.display = 'none';
    dialog.style.display = 'none';
  }

  // 监听滚动条滚动事件,让弹出层跟随滚动
  window.onscroll = function() {
    dialog.style.top = document.documentElement.scrollTop + document.documentElement.clientHeight/2 - dialog.offsetHeight/2 + 'px';
  }
}

在示例二中,我们首先定义了一个图片的HTML代码,并使用CSS样式设置了图片、遮罩层和弹出层的样式。然后,我们使用JS实现了点击图片弹出大图,并对大图进行居中定位及跟随滚动。最后,我们通过监听点击事件实现了点击遮罩层隐藏大图。

3. 攻略总结

通过以上示例,我们可以总结出JS+CSS实现遮罩居中弹出层(随浏览器窗口滚动条滚动)的攻略:

  1. 首先,使用CSS样式设置遮罩层和弹出层的样式。
  2. 然后,使用JS实现弹出层的居中定位及跟随滚动。
  3. 最后,通过监听点击事件实现了点击遮罩层隐藏弹出层。

这样就可以实现一个完美的遮罩居中弹出层了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS中div、span和center元素

    下面我将对“CSS中div、span和center元素”的完整攻略进行详细讲解。 1. div元素 1.1 div元素的作用 div元素是CSS中的块级元素,其作用是用来分组HTML元素,并且可以给分组的元素设置样式和属性。通常情况下,我们会使用div元素来布局网页的各个部分,比如导航栏、主体内容、底部信息等等,同时也可以对这些部分分别设置不同的样式。 1.…

    css 2023年6月9日
    00
  • Vue 列表上下过渡效果的实例代码

    我来详细讲解一下“Vue 列表上下过渡效果的实例代码”的完整攻略。 1. 安装必要的依赖 首先,我们需要安装一些必要的依赖,这里我们使用npm来进行安装: npm install vue npm install vue-router npm install vue-template-compiler 2. 创建组件 接下来,我们需要创建一个List组件。这个…

    css 2023年6月10日
    00
  • 标记语言——网页应用CSS样式

    当我们创建网页时,HTML和CSS是两个必不可少的技术。HTML用于定义网页的结构和内容,而CSS用于定义网页的样式和布局。在本攻略中,我们将重点介绍如何使用CSS样式来美化网页。 CSS样式基础知识 在CSS中,可以使用多种方式来定义样式,包括选择器、属性和值。以下是一些基本的CSS样式属性: color:用于指定文本颜色。 background-colo…

    css 2023年5月18日
    00
  • CSS3的Flexible Boxes详细使用教程

    CSS3的Flexible Boxes详细使用教程 CSS3的Flexible Boxes(弹性盒子)是CSS布局的一种新技术,它可以更好地解决页面中的布局问题。通过使用弹性盒子,我们可以更方便地实现响应式设计,减少多余的CSS代码。 弹性盒子的基本概念 弹性盒子由容器和项目组成,容器包括了一定数量的项目。在弹性布局中,我们把容器称为“flex contai…

    css 2023年6月11日
    00
  • JS模拟并美化的表单控件完整实例

    下面是JS模拟并美化的表单控件完整实例的攻略: 1. 了解需求 在开始编码之前,我们需要了解实现的需求,明确要完成以下任务: 模拟select、radio、checkbox等常见的表单控件,实现其基本功能 所有表单控件需要有美观的样式效果 2. 分析思路 在了解需求之后,我们需要进一步分析如何实现。 对于select控件的模拟,我们可以利用HTML的原生se…

    css 2023年6月10日
    00
  • html pre标签使文本自动换行

    HTML pre标签使文本自动换行 在HTML中,pre标签为预格式化标签。它允许你编写如何呈现文本的方式。pre标签会保留在文本编辑器中所有的空格、换行符和其他空间字符,并将它们显示在HTML页面上。这使得pre标签非常适合用于呈现代码块和其他格式化文本。 基本用法 以下是一个基本的使用示例: <pre> Hello World How are…

    css 2023年6月9日
    00
  • 可以随进度显示不同颜色的css3进度条分享

    当我们需要在网站或应用程序中显示进度条时,CSS3提供了许多选项。本攻略将详细讲解如何实现一个可以随着进度变化显示不同颜色的CSS3进度条。 实现方法 第一步:HTML结构 首先,我们需要设置HTML结构。在body标签内部,创建一个div元素,并设置class属性为“progress”。在这个div元素内部,我们需要再创建另一个div元素,并设置class…

    css 2023年6月9日
    00
  • 值得分享的轻量级Bootstrap Table表格插件

    当谈及Bootstrap表格插件时,Bootstrap Table通常是前端开发者们的首选。Bootstrap Table是一款高度可定制性和轻量级的Bootstrap表格插件。本文将提供关于如何使用Bootstrap Table插件的完整攻略,介绍如何配置和使用Bootstrap表格,如何添加分页器和搜索器,以及如何处理表单提交。 安装和使用Bootstr…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部