JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例

以下是“JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例”的完整攻略。

1. 实现思路

实现点击某区域以外时弹窗的弹出与关闭功能,通常需要使用到以下两个关键点:

  • 给页面添加遮罩层:当弹窗弹出时,为了让用户无法操作页面中的其他内容,我们需要添加一个遮罩层来将其他内容覆盖住;
  • 给遮罩层和弹窗添加事件监听:我们需要监听“点击遮罩层”和“点击弹窗中除关闭按钮以外的部分”这两个事件,来触发相应的弹窗关闭和打开操作。

2. 示例一:点击遮罩关闭弹窗

以下是一段示例代码,用于实现点击遮罩关闭弹窗的功能:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8"/>
    <title>点击遮罩关闭弹窗</title>
    <style>
      /* 遮罩样式 */
      .mask {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, .5);
        z-index: 999;   /* 遮罩层级设置 */
        display: none;  /* 隐藏遮罩层 */
      }
      /* 弹窗样式 */
      .popup {
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        padding: 20px;
        background-color: white;
        z-index: 1000;  /* 弹窗层级设置 */
      }
    </style>
  </head>
  <body>
    <button id="openBtn">打开弹窗</button>

    <!-- 遮罩层 -->
    <div class="mask"></div>

    <!-- 弹窗 -->
    <div class="popup">
      <h2>弹窗标题</h2>
      <p>弹窗内容</p>
      <button id="closeBtn">关闭</button>
    </div>

    <script>
      // 弹窗打开按钮点击事件
      document.getElementById('openBtn').onclick = function() {
        // 显示遮罩层和弹窗
        document.querySelector('.mask').style.display = 'block';
        document.querySelector('.popup').style.display = 'block';

        // 点击遮罩层关闭弹窗
        document.querySelector('.mask').onclick = function() {
          document.querySelector('.mask').style.display = 'none';
          document.querySelector('.popup').style.display = 'none';
        };
      };

      // 弹窗关闭按钮点击事件
      document.getElementById('closeBtn').onclick = function() {
        // 关闭弹窗和遮罩层
        document.querySelector('.mask').style.display = 'none';
        document.querySelector('.popup').style.display = 'none';
      };
    </script>
  </body>
</html>

这段代码中,我们首先定义了遮罩层(.mask)和弹窗(.popup)的样式,并将它们都设为固定定位(position: fixed)。接着,在打开弹窗的按钮点击事件中,我们通过修改其style.display属性来显示遮罩层和弹窗,并监听遮罩层的click事件,当点击遮罩时,我们同样通过修改其style.display属性来隐藏遮罩和弹窗。在弹窗中,我们还添加了一个“关闭”按钮,用于在点击时关闭弹窗和遮罩。

3. 示例二:点击弹窗以外区域关闭弹窗

如果我们想在用户点击弹窗以外区域时,同样能够关闭弹窗,那么可以在遮罩层上设置pointer-events: none来让它不响应鼠标事件。然后,通过在window对象上监听click事件,来判断用户是否点击了弹窗以外的区域,并在此情况下关闭弹窗。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8"/>
    <title>点击弹窗以外区域关闭弹窗</title>
    <style>
      /* 遮罩样式 */
      .mask {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, .5);
        z-index: 999;   /* 遮罩层级设置 */
        display: none;  /* 隐藏遮罩层 */
        pointer-events: none;
      }
      /* 弹窗样式 */
      .popup {
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        padding: 20px;
        background-color: white;
        z-index: 1000;  /* 弹窗层级设置 */
      }
    </style>
  </head>
  <body>
    <button id="openBtn">打开弹窗</button>

    <!-- 遮罩层 -->
    <div class="mask"></div>

    <!-- 弹窗 -->
    <div class="popup">
      <h2>弹窗标题</h2>
      <p>弹窗内容</p>
      <button id="closeBtn">关闭</button>
    </div>

    <script>
      // 弹窗打开按钮点击事件
      document.getElementById('openBtn').onclick = function() {
        // 显示遮罩层和弹窗
        document.querySelector('.mask').style.display = 'block';
        document.querySelector('.mask').style.pointerEvents = 'auto';
        document.querySelector('.popup').style.display = 'block';

        // 给窗口添加click事件
        window.onclick = function(e) {
          // 如果点击区域不在弹窗内,则关闭弹窗和遮罩层
          var popupElem = document.querySelector('.popup');
          if (!popupElem.contains(e.target)) {
            document.querySelector('.mask').style.display = 'none';
            document.querySelector('.mask').style.pointerEvents = 'none';
            document.querySelector('.popup').style.display = 'none';
          }
        }
      };

      // 弹窗关闭按钮点击事件
      document.getElementById('closeBtn').onclick = function() {
        // 关闭弹窗和遮罩层
        document.querySelector('.mask').style.display = 'none';
        document.querySelector('.mask').style.pointerEvents = 'none';
        document.querySelector('.popup').style.display = 'none';
      };
    </script>
  </body>
</html>

在这段代码中,我们在打开弹窗时,增加了一个pointer-events属性,将其设为auto,以便在用户点击遮罩层时触发监听事件。并且我们在window对象上添加了一个click事件监听器,用于判断用户点击区域是否在弹窗中。如果不是,则关闭弹窗和遮罩层。

总结

在实现点击某区域以外时弹窗的弹出与关闭功能中,我们主要需要考虑三个关键点:添加遮罩层、监听遮罩和弹窗内部的点击事件,及监听窗口的点击事件。在实际开发中,我们可以结合具体的项目实现要求,灵活运用这些关键点,达到最佳的使用效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例 - Python技术站

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

相关文章

  • vue中的attribute和property的具体使用及区别

    Vue中Attribute和Property的使用及区别 在Vue中,我们经常使用Attribute和Property来设置或获取元素的属性值,这两者是有区别的。在本文中,我们将会详细讲解它们的用法及区别。 Attribute和Property的区别 首先,我们需要明确Attribute和Property的区别。简单来说,Attribute是在HTML中定义…

    JavaScript 2023年6月10日
    00
  • 了解一下XSS

    XSS,即跨站脚本攻击(Cross-Site Scripting),是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本代码,使得浏览器执行这些脚本,从而控制网页上的内容或者获取用户的敏感信息。XSS 攻击一般分为反射型、存储型和 DOM 型三种类型。 1. 反射型 XSS 攻击 反射型 XSS 攻击是指攻击者通过向目标网站提交带有恶意脚本代码的请求,使…

    JavaScript 2023年4月25日
    00
  • js 定时器setTimeout无法调用局部变量的解决办法

    当我们在js代码中定义了局部变量,如果要在定时器setTimeout中使用该变量,可能会出现无法调用的情况。这是因为定时器是基于全局变量执行的,而局部变量只能在定义它的函数中使用。 为了解决这个问题,我们可以采用以下两种方法: 方法一:使用闭包 我们可以通过将变量封装在一个函数内部,并返回一个函数的方式创建一个闭包,使得该变量可以被定时器正确调用。以下是一个…

    JavaScript 2023年6月11日
    00
  • JavaScript中var关键字的使用详解

    JavaScript中var关键字的使用详解 在JavaScript中,var关键字用于声明一个变量。在本文中,我们将深入探讨var关键字的使用,包括其使用场景、作用域以及变量提升等方面。 声明变量 在JavaScript中,变量可以通过var关键字进行声明。例如: var x = 10; 以上代码中,我们声明了一个名为x的变量,并将其赋值为10。需要注意的…

    JavaScript 2023年5月27日
    00
  • 如何调试异步加载页面里包含的js文件

    调试异步加载页面里包含的JS文件是网站开发中一项非常重要的任务。在这里,我将为你提供一些调试异步加载JS的攻略和技巧。 使用Chrome DevTools调试异步加载的JS文件 Chrome DevTools 是一个非常强大的调试工具,它提供了一些重要特性来调试异步加载的 JS 文件。以下是一些示例: 1.通过Sources面板调试异步加载的JS文件 在Ch…

    JavaScript 2023年5月27日
    00
  • JavaScript中DOM和BOM原理详析

    JavaScript中DOM和BOM原理详析 什么是DOM? DOM(文档对象模型)是JavaScript操作网页的接口,它将网页文档看成一个树形结构,可以通过JavaScript来操作这个树形结构中的各个节点。HTML中的标签、文本和属性都被表示为树中的节点,节点与节点之间有父子和兄弟关系。 DOM接口 DOM提供了一系列的API,可以通过这些API对节点…

    JavaScript 2023年6月10日
    00
  • JavaScript面试题大全(推荐)

    感谢对本网站的关注和支持。以下是对于“JavaScript面试题大全(推荐)”的完整攻略: 简介 “JavaScript面试题大全(推荐)”是一篇完整的JavaScript面试题目合集,其中包含了常见的JavaScript面试题以及它们的详细答案解释。本文的题目难度从基础到高级不等,覆盖了面试中常见的各个知识点。该题集不仅适用于求职者准备面试,也适合企业HR…

    JavaScript 2023年5月27日
    00
  • JavaScript实现AOP详解(面向切面编程,装饰者模式)

    JavaScript实现AOP详解 什么是AOP AOP(Aspect Oriented Programming),中文译为面向切面编程,是一种编程方法论。它通过预编译方式和运行期动态代理实现程序功能的统一维护的方法。 AOP 解决的问题主要是将那些与业务无关,却为业务模块所共同调用的逻辑或责任进行封装,并分离出来,例如在不修改源代码的情况下统一添加日志记录…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部