js+CSS实现弹出居中背景半透明div层的方法

实现弹出居中背景半透明div层的方法基本思路是利用CSS实现半透明背景层,利用JavaScript控制弹框层的显示和隐藏并使其在页面居中。

1. 编写HTML结构

首先,在HTML中添加弹框层的结构,例如:

<div id="mask"></div>
<div id="dialog">
  <div class="title">标题</div>
  <div class="content">内容</div>
  <div class="btns">
    <a href="javascript:;" class="btn btn-ok">确定</a>
    <a href="javascript:;" class="btn btn-cancel">取消</a>
  </div>
</div>

其中,mask是半透明背景层,dialog是弹框层,title是标题部分,content是内容部分,btns是操作按钮组。

2. 利用CSS实现半透明背景层

半透明背景层可以使用position: fixed属性实现,然后设置背景颜色和透明度即可,例如:

#mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 9998;
  background-color: #000;
  opacity: 0.5;
}

其中,topleftwidthheight设置为100%,可以使半透明背景层覆盖整个页面;z-index是设置层级,使其在弹框层之下;background-color是设置背景颜色;opacity是设置透明度。

3. 利用JavaScript控制弹框层的显示和隐藏

在JavaScript中,需要控制弹框层的显示和隐藏,并计算使其居中的位置。

3.1 控制显示和隐藏

我们可以使用display属性控制弹框层的显示和隐藏,当需要显示时,设置displayblock,当需要隐藏时,设置displaynone。例如:

// 显示弹框层
document.getElementById('mask').style.display = 'block';
document.getElementById('dialog').style.display = 'block';

// 隐藏弹框层
document.getElementById('mask').style.display = 'none';
document.getElementById('dialog').style.display = 'none';

3.2 计算居中位置

为了使弹框层居中,我们需要计算其坐标值。具体计算方式如下:

var dialog = document.getElementById('dialog');
var screenWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var screenHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
var dialogWidth = dialog.offsetWidth;
var dialogHeight = dialog.offsetHeight;
var left = (screenWidth - dialogWidth) / 2 + scrollLeft;
var top = (screenHeight - dialogHeight) / 2 + scrollTop;

dialog.style.left = left + 'px';
dialog.style.top = top + 'px';

其中,screenWidthscreenHeight表示浏览器窗口的宽度和高度;scrollLeftscrollTop表示窗口的滚动距离;dialogWidthdialogHeight是弹框层的宽度和高度。

示例1:点击按钮弹出居中背景半透明div层

下面是一个简单的示例,点击按钮即可弹出居中背景半透明div层。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>示例1:点击按钮弹出居中背景半透明div层</title>
  <style>
    #mask {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      z-index: 9998;
      background-color: #000;
      opacity: 0.5;
    }
    #dialog {
      position: fixed;
      left: 50%;
      top: 50%;
      z-index: 9999;
      transform: translate(-50%,-50%);
      border: 1px solid #ccc;
      background-color: #fff;
      padding: 20px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.3);
    }
    #dialog .title {
      font-weight: bold;
      font-size: 18px;
      margin-bottom: 10px;
    }
    #dialog .btns {
      text-align: right;
      margin-top: 10px;
    }
    #dialog .btns .btn {
      display: inline-block;
      margin-left: 10px;
      padding: 5px 10px;
      border: 1px solid #666;
      border-radius: 4px;
      color: #666;
      text-decoration: none;
      background-color: #eee;
      transition: all 0.3s ease-in-out;
    }
    #dialog .btns .btn:hover {
      color: #fff;
      background-color: #666;
    }
  </style>
</head>
<body>
  <button id="btn">点击弹出</button>
  <div id="mask"></div>
  <div id="dialog">
    <div class="title">标题</div>
    <div class="content">内容</div>
    <div class="btns">
      <a href="javascript:;" class="btn btn-ok">确定</a>
      <a href="javascript:;" class="btn btn-cancel">取消</a>
    </div>
  </div>
  <script>
    var btn = document.getElementById('btn');
    var mask = document.getElementById('mask');
    var dialog = document.getElementById('dialog');

    btn.onclick = function() {
      mask.style.display = 'block';
      dialog.style.display = 'block';
      var screenWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
      var screenHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
      var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;
      var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
      var dialogWidth = dialog.offsetWidth;
      var dialogHeight = dialog.offsetHeight;
      var left = (screenWidth - dialogWidth) / 2 + scrollLeft;
      var top = (screenHeight - dialogHeight) / 2 + scrollTop;
      dialog.style.left = left + 'px';
      dialog.style.top = top + 'px';
    };

    dialog.querySelectorAll('.btn').forEach(function(btn) {
      btn.onclick = function() {
        mask.style.display = 'none';
        dialog.style.display = 'none';
      };
    });
  </script>
</body>
</html>

示例2:页面加载时弹出居中背景半透明div层

下面是另一个示例,页面加载时即可弹出居中背景半透明div层。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>示例2:页面加载时弹出居中背景半透明div层</title>
  <style>
    #mask {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      z-index: 9998;
      background-color: #000;
      opacity: 0.5;
    }
    #dialog {
      position: fixed;
      left: 50%;
      top: 50%;
      z-index: 9999;
      transform: translate(-50%,-50%);
      border: 1px solid #ccc;
      background-color: #fff;
      padding: 20px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.3);
    }
    #dialog .title {
      font-weight: bold;
      font-size: 18px;
      margin-bottom: 10px;
    }
    #dialog .btns {
      text-align: right;
      margin-top: 10px;
    }
    #dialog .btns .btn {
      display: inline-block;
      margin-left: 10px;
      padding: 5px 10px;
      border: 1px solid #666;
      border-radius: 4px;
      color: #666;
      text-decoration: none;
      background-color: #eee;
      transition: all 0.3s ease-in-out;
    }
    #dialog .btns .btn:hover {
      color: #fff;
      background-color: #666;
    }
  </style>
</head>
<body>
  <div id="mask"></div>
  <div id="dialog">
    <div class="title">标题</div>
    <div class="content">内容</div>
    <div class="btns">
      <a href="javascript:;" class="btn btn-ok">确定</a>
      <a href="javascript:;" class="btn btn-cancel">取消</a>
    </div>
  </div>
  <script>
    var mask = document.getElementById('mask');
    var dialog = document.getElementById('dialog');

    window.onload = function() {
      mask.style.display = 'block';
      dialog.style.display = 'block';
      var screenWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
      var screenHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
      var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;
      var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
      var dialogWidth = dialog.offsetWidth;
      var dialogHeight = dialog.offsetHeight;
      var left = (screenWidth - dialogWidth) / 2 + scrollLeft;
      var top = (screenHeight - dialogHeight) / 2 + scrollTop;
      dialog.style.left = left + 'px';
      dialog.style.top = top + 'px';
    };

    dialog.querySelectorAll('.btn').forEach(function(btn) {
      btn.onclick = function() {
        mask.style.display = 'none';
        dialog.style.display = 'none';
      };
    });
  </script>
</body>
</html>

以上两个示例都实现了弹出居中背景半透明div层的方法,2个示例代码的区别为一个是"页面加载时"弹出一个是"点击按钮"弹出的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js+CSS实现弹出居中背景半透明div层的方法 - Python技术站

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

相关文章

  • html超链接样式(四种不同状态)设置示例

    下面是“html超链接样式(四种不同状态)设置示例”的完整攻略。 一、认识超链接样式 超链接是项目建设中常用的功能之一,它能够让用户能够跳转到指定的网址或者位置。在设计网站时,要使得链接目标和周边信息区分明确,统一的链接样式显得尤为重要。 当用户与我们的网站进行交互时,超链接有以下状态: link:默认状态,指的是用户还未访问过该链接; visited:该状…

    css 2023年6月10日
    00
  • 如何使用css绘制钻石的方法

    使用 CSS 绘制钻石的方法主要是通过制定钻石的尺寸、颜色和边框样式等属性,并设置旋转角度来实现。以下是如何使用 CSS 绘制钻石的完整攻略: 钻石形状的设置 使用 CSS 的伪元素 ::before 和 ::after 来绘制钻石的形状。具体可以按照以下步骤来实现: 首先,需要设置钻石的尺寸和位置,可以使用 width 和 height 属性来设置钻石的大…

    css 2023年6月9日
    00
  • javascript常见操作汇总

    Javascript常见操作汇总 Javascript是一种广泛用于Web前端开发的编程语言。在实际使用中,掌握Javascript的常见操作非常重要。本篇攻略总结了Javascript的常见操作,希望能够为新手提供一些帮助。 常见操作1:变量赋值 Javascript使用var关键字来声明变量。使用等号(=)将变量赋值。例如: var a = 10; va…

    css 2023年6月10日
    00
  • 利用原生JavaScript获取元素样式只是获取而已

    获取元素样式是我们在前端开发中经常需要使用的一种技术,而利用原生JavaScript获取元素样式只是获取而已,它有一定的规则和技巧。以下是关于该过程的完整攻略: 利用原生JavaScript获取元素样式 1.用getElementById方法获取元素样式属性 首先使用getElementById方法获取一个元素对象,然后获取该元素对象的某个样式属性。示例如下…

    css 2023年6月10日
    00
  • 浅谈react 同构之样式直出

    针对“浅谈react同构之样式直出”的话题,我将为您提供完整的攻略。 什么是React同构之样式直出 React同构指在服务端渲染React组件,生成静态HTML字符串,并把它们在客户端挂载到DOM上。 在React同构应用中,我们希望用户在初次加载页面时就得到可以交互的页面,而不用等待到客户端渲染完成才能交互。 React同构中样式直出就是在服务端渲染时,…

    css 2023年6月10日
    00
  • 自适应屏幕的CSS响应式布局设计技巧总结

    下面我将为你详细介绍自适应屏幕的CSS响应式布局设计技巧总结的完整攻略。 什么是自适应屏幕的CSS响应式布局? 自适应屏幕的CSS响应式布局是指根据设备屏幕的大小和分辨率,在同一页面中使用不同的样式规则,使页面在不同尺寸的屏幕上均能够良好地呈现。 实现自适应布局需要使用CSS的媒体查询、flex布局、百分比布局等技术。 自适应屏幕的CSS响应式布局设计技巧总…

    css 2023年6月9日
    00
  • Vue使用Swiper的案例详解

    Vue使用Swiper的案例详解 介绍 Vue.js 是一个渐进式 JavaScript 框架,可以轻易地建立单页面应用程序(Single Page Application)。 Swiper 是一款轻量级的移动端(支持 PC 端)触摸滑动插件,用于实现轮播图、图片切换等效果。 在本文中,我们将讲解如何在 Vue 项目中使用 Swiper 插件来实现轮播图效果…

    css 2023年6月9日
    00
  • 利用CSS中linear制作复杂的边框效果

    利用CSS中linear制作复杂的边框效果其实并不难,以下是具体步骤: 1. 设置边框 首先,需要使用CSS中的border属性来设置元素的边框,例如: border: 3px solid #000; 这将会设置一个黑色的3像素宽度的实线边框。当然,你也可以设置其他颜色、大小、边框样式等。 2. 创建线性渐变 接下来,我们需要创建一个线性渐变来作为边框的效果…

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