常见需求场景

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

解决方法

思路说明:

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);
}

关于点击弹框外部区域弹框关闭的交互处理(前端JS)的更多相关文章

  1. ElementUI+Vue在使用el-dialog时,如何做到在弹出dialog时,外部呈锁定状态,而不是点击外部导致dialog直接关闭。

    ElementUI+Vue在使用el-dialog时,如何做到在弹出dialog时,外部呈锁定状态,而不是点击外部导致dialog直接关闭. 问题描述 今天,在做Element+Vue项目时发现:Di ...

  2. Asp.net点击按钮弹出文件夹选择框的实现(网页)

    本文地址:http://www.cnblogs.com/PiaoMiaoGongZi/p/4092112.html 在Asp.net网站实际的开发中,比如:需要实现点击一个类似于FileUpload的 ...

  3. form WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法

    针对WebBrowser控件中自动点击弹出框及禁用脚本提示问题得到如下几种实际情况的解决办法,绝对管用. 1.屏蔽弹出错误脚本 将WebBrowser控件ScriptErrorsSuppressed设 ...

  4. 经验总结:WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法

    经验总结:WebBrowser自动点击弹出提示框alert.弹出对话框confirm.屏蔽弹出框.屏蔽弹出脚本错误的解决办法 网上有好多解决方法,可是不一定好使,本人经过多次试验,针对WebBrows ...

  5. 【 js 片段 】点击空白或者页面其他地方,关闭弹框

    $(document).mouseup(function(e){ var _con = $(' 目标区域 '); // 设置目标区域 if(!_con.is(e.target) && ...

  6. 小程序中点击input控件键盘弹出时placeholder文字上移

    最近做的一个小程序项目中,出现了点击input控件键盘弹出时placeholder文字上移,刚开始以为是软键盘弹出布局上移问题是传说中典型的fixed 软键盘顶起问题,因此采纳了网上搜到的" ...

  7. 点击图片或者鼠标放上hover .图片变大. 1)可以使用css中的transition, transform 2) 预先设置一个 弹出div. 3)弹出层 alert ; 4) 浏览器的宽度document.documentElement.clientWidth || document.body.clientWidth

    变大: 方法一: 利用css属性. 鼠标放上 hover放大几倍. .kecheng_02_cell_content img { /*width: 100px; height: 133px;*/ wi ...

  8. 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-3 模态弹出框

    模态弹出框(Modals) 这一小节我们先来讲解一个“模态弹出框”,插件的源文件:modal.js. 右侧代码编辑器(30行)就是单独引入 bootstrap 中发布出的“modal.js”文件. 样 ...

  9. js创建弹框(提示框,待确认框)

    ;;} html,body{text-size-adjust:none;-webkit-text-size-adjust:none;-webkit-user-select:none;} a{color ...

随机推荐

  1. k8s-命令创建service

    查看命令帮助 [root@master kubernetes]# kubectl create service -h Create a service using specified subcomma ...

  2. go 多协程爬取图片

    package main import ( "fmt" "github.com/antchfx/htmlquery" "golang.org/x/ne ...

  3. 基于gin的golang web开发:路由

    Gin是一个用Golang编写的HTTP网络框架.它的特点是类似于Martini的API,性能更好.在golang web开发领域是一个非常热门的web框架. 启动一个Gin web服务器 使用下面的 ...

  4. DefenseCode宣布集成GitHub为开发人员提供SAST解决方案

    DefenseCode集团宣布,DefenseCode静态应用程序安全测试(SAST)ThunderScan解决方案现可作为一个GitHub Action,提供30多种语言的安全漏洞分析,并将详细的漏 ...

  5. IDEA安装IDEA阿里Java规范插件

    插件安装方式有两种: 1.通过在线方式安装,搜索后找到,点击Install安装即可: 2.去官网plugins下载对应插件离线包,地址:https://plugins.jetbrains.com/pl ...

  6. Jetson AGX Xavier ROS下调用USB单目摄像头

    Jetson AGX Xavier安装的ROS是Melodic版本的,所以部署的时候用到的包都是Melodic的. 1. 查看USB摄像头 摄像头连接Xavier设备,调用命令查看. ls /dev/ ...

  7. linux上性能调优常用命令及简介

    1.综合命令:nmon.top:topas(aix) d :磁盘相关 c:cpu相关 m:内存相关 2.磁盘 2.1 测试顺序写性能dd if=/dev/zero of=/cdr/test.data ...

  8. 导入tensorflow.出现importError: DLL load failed: 找不到指定的模块。

    导入tensorflow.出现importError: DLL load failed: 找不到指定的模块. 原因 这是由于windows上没有相应的动态链接库导致的,tensorflow依赖很多c+ ...

  9. Flask 中的MTV架构之Models

    Flask 中的MTV架构之Models 1.Models(数据模型) 1.1 flask-sqlalchemy(数据库) ​ 说明:提供了大多数关系型数据库的支持,而且提供了ORM # 安装: pi ...

  10. 华为云FusionInsight MRS:助力企业构建“一企一湖,一城一湖”

    摘要:华为云FusionInsight MRS新一代的数据湖,让大数据越用越快.越用越易.越用越稳.越用越省!让数据价值近在眼前! 10月30日,以"携手共赢·数创未来"为主题的第 ...