zoukankan      html  css  js  c++  java
  • 关于点击弹框外部区域弹框关闭的交互处理

    常见需求场景

    前端在处理交互的时候,经常遇到这样的场景,点击一个按钮,出现一个弹框,点击外部区域,弹框关闭。

    解决方法

    思路说明:
    1、给弹框的div父级都加个类名,如:

    2、在document绑定一个点击事件,获取当前点击元素的类名,开始向上找,找它的父级类名,
    2.1. 包含我们加的几个类名,则表示点击的是当前框,不处理;
    2.2. 不包含我们加的几个类名,则是外部区域,关闭当前显示框;

    代码实现

    // 添加点击事件
    document.addEventListener('click', e => {
          if (this.boxShow) {
          this.closeBox(e);
        }
    });          
    
     // 关闭弹窗处理
     closeBox(e) {
        e.stopPropagation();
        // 获取当前元素的所有父级元素
        const parentNames = this.getParentsClassName(e.target);
        
        // 如果不包括我们定义的框父级类名,则关闭弹框
        if (
          !parentNames.includes('box-content') &&
          !parentNames.includes('box-filter') &&
          !parentNames.includes('box-list')
        ) {
          this.boxShow= false;
        }
      }
      
      // 获取当前元素的类名,及其所有的父级类名
      getParentsClassName (el) {
          let p = el.parentNode;
          const parents = new Set();
          parents.add(el.className);
          while (p && p.tagName !== 'BODY') {
            parents.add(p.className);
            p = p.parentNode;
          }
          return Array.from(parents);
        }
    
  • 相关阅读:
    记一次百度面试题
    深度拷贝对象
    spring boot 学习笔记
    mac Zip 常用命令
    Mac OS 终端下使用 Curl 命令下载文件
    懒人必备的移动端定宽网页适配方案
    前端面试题之 sum(2)(3) (链式调用,toString,柯里化,数组操作)
    web上的复制
    fileupload上传文件时带参数
    Mac下Nginx环境配置
  • 原文地址:https://www.cnblogs.com/webhmy/p/14015065.html
Copyright © 2011-2022 走看看