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

yizhihongxing

下面我会详细讲解“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日

相关文章

  • 规范HTML代码可以节省修改代码的时间

    HTML是网页的基础,它的规范化对于整个网站的可维护性至关重要。以下是规范HTML代码可以节省修改代码的时间的攻略: 1.选择合适的标签和语义 在编写HTML代码时应该尽量选择合适的标签和语义。一个良好的语义结构可以使网页更加易于理解,并且可以让搜索引擎更好地理解网页内容,从而提高网页的排名。 例如,在文章标题中应该使用<h1>标签,而不是其他标…

    css 2023年6月10日
    00
  • 一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子

    下面是一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子的完整攻略。 介绍 随着Web技术的发展,Javascript在Web前端开发中扮演着越来越重要的角色。然而,不同的浏览器(如IE和Firefox等)对Javascript的支持程度不同,会导致一些兼容性问题。本攻略总结了一些常见的Javascript的IE和Firefox…

    css 2023年6月10日
    00
  • 深入理解CSS height属性设置元素的高度

    深入理解CSS height属性设置元素的高度 在CSS中,height属性用于设置元素的高度,可以应用于大部分的HTML元素。 基本语法 element { height: value; } 其中,value可以是具体的数值,也可以是百分比。 数值作为height属性值 数值可以作为height属性值,可以用像素(px)、点(pt)、厘米(cm)、英寸(i…

    css 2023年6月9日
    00
  • Vue.js常用指令的使用小结

    下面是关于“Vue.js常用指令的使用小结”的完整攻略。 1. 常用指令简介 在 Vue.js 中,指令是特殊的带有 v- 前缀的自定义 HTML 属性,用于在渲染模板时添加特殊的响应式行为。常用指令包括 v-model、v-bind、v-on 等。下面对常用指令的使用方法进行详细介绍: 1.1 v-model 指令 v-model 指令可以在表单元素上创建…

    css 2023年6月11日
    00
  • layui的布局和表格的渲染以及动态生成表格的方法

    我来详细讲解一下“layui的布局和表格的渲染以及动态生成表格的方法”的完整攻略。 layui的布局 在layui中,布局一般使用面板(panel)和卡片(card)来完成。面板中包含了头(header)、体(body)和脚(footer)三个部分。卡片则是一种比面板更加轻量的容器。 下面是一个示例代码,演示了如何使用layui布局: <div cla…

    css 2023年6月10日
    00
  • css 完美清除浮动的两种解决方案

    当一个元素实现浮动后,其父元素可能会失去高度,造成布局混乱,而清除浮动则是指清除浮动元素对父元素造成的影响,使其能正常显示。下面介绍两种常用的清除浮动方法。 方法一:使用空元素清除浮动 步骤一:给浮动元素的父元素添加clearfix类 <div class="parent clearfix"> <div class=&q…

    css 2023年6月10日
    00
  • 使用div+CSS将页脚始终控制在页面最下方的方法

    下面我将详细讲解使用div+CSS将页脚始终控制在页面最下方的方法。 方案1:使用绝对定位 首先,我们在HTML文件中创建一个div元素用于承载页脚,给它一个唯一的ID,例如: <div id="footer"></div> 接下来,我们需要使用CSS样式对这个div元素进行定位。使用绝对定位可以让元素相对于整个页…

    css 2023年6月10日
    00
  • min-height和min-width两个最小高度和最小宽度兼容多浏览器版本

    要指定一个元素的最小宽度和/或最小高度,可使用CSS的min-width和min-height属性。当元素必须填充其包含框时,这些属性特别有用。 在使用min-width和min-height属性时,有几个兼容性问题可能需要注意。以下是一些解决这些问题的方法。 1. 设置DOCTYPE 在HTML文档开头的第一行添加DOCTYPE声明可以确保浏览器正确地渲染…

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