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日

相关文章

  • js charAt的使用示例

    是的,我可以为你提供有关使用JavaScript中的charAt()方法的攻略。下面是完整的攻略,其中包含了两个实例: charAt() 方法的介绍 charAt() 是 JavaScript 字符串中的一种方法,它用于返回字符串中指定位置的字符。它也常用来检查字符串中是否包含想要的字符。该方法的语法如下: string.charAt(index) 其中,s…

    JavaScript 2023年5月19日
    00
  • 将字符串中由空格隔开的每个单词首字母大写

    要将字符串中由空格隔开的每个单词首字母大写,可以使用字符串操作方法和正则表达式。 步骤如下: 首先要将字符串进行拆分,将每个单词分离。可以使用split()方法,该方法可以按照指定字符或正则表达式对字符串进行分割,返回一个由分割出来的子字符串组成的数组。 例如: let str = "hello world"; let arr = str…

    JavaScript 2023年6月11日
    00
  • js获取html文件的思路及示例

    获取HTML文件的思路主要分为两步:首先,需要用AJAX(Asynchronous JavaScript and XML)进行HTTP请求来获取HTML文件;然后,需要解析文件内容,将其转换为DOM(Document Object Model)对象,以便进一步操作。下面我将分步骤详细讲解。 一、用AJAX请求HTML文件 AJAX是一种用于创建异步请求的技术…

    JavaScript 2023年5月27日
    00
  • 使用微信小程序API,调用微信的各种内置能力。

    下面是使用微信小程序API,调用微信的各种内置能力的完整攻略: 确认需要调用的API 首先需要确认你需要调用哪些API来实现你的功能。在微信小程序官方文档中,有一份与“微信小程序API能力”相关的内容提供了详细文档,我们可以通过这份文档快速找到需要的API。 引入API 在需要使用API的页面或程序中,需要先引入对应的API。引入API的方法一般如下: co…

    JavaScript 2023年6月11日
    00
  • javascript实现图片左右滚动效果【可自动滚动,有左右按钮】

    下面是详细讲解“javascript实现图片左右滚动效果【可自动滚动,有左右按钮】”的完整攻略: 1. 确定HTML结构 首先需要确定HTML结构,一般来说,我们可以使用 ul 和 li 标签来实现一个图片轮播图。如下所示: <div class="container"> <ul class="img-list…

    JavaScript 2023年6月11日
    00
  • jquery中animate动画积累的解决方法

    标题:jQuery中animate动画积累的解决方法 问题: 在使用jQuery的animate()方法时,我们可能会遇到动画积累的问题。比如,当我们多次点击一个按钮触发动画时,如果每次点击都会开始一个新的动画,那么这些动画就会重叠在一起,导致页面出现意外的效果。那么,如何解决这个问题呢? 解决方法: jQuery提供了一个stop()方法,可以用于停止、清…

    JavaScript 2023年6月11日
    00
  • 使用javascript做的一个随机点名程序

    下面是使用JavaScript做随机点名程序的完整攻略。 一、前期准备 在开始编写随机点名程序之前,需要确定以下问题: 需要点名的人员名单存储在什么地方? 点名程序的界面如何设计? 点击“点名”按钮后,程序如何读取名单并实现随机选择? 随机选择后,如何将选中的人员信息展示在界面上? 在回答这些问题之后,就可以开始编写代码了。 二、程序实现 1. 存储名单 我…

    JavaScript 2023年5月28日
    00
  • JS实现动态倒计时功能(天数、时、分、秒)

    实现动态倒计时功能是Web开发中常见的需求之一,JS是实现这一功能的重要工具之一。下面我会为你详细讲解如何使用JS实现动态倒计时,并提供两个详细的示例说明。 编写HTML结构 首先需要在HTML页面中添加需要倒计时的元素,可以使用HTML5中的<time>元素来显示时间。在这个例子中,我们将需要倒计时的元素放在<div>标签中。 &l…

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