点击遮罩层非内容区域关闭遮罩层的三种思路四种方案

18 篇文章 1 订阅
18 篇文章 0 订阅

开发过程中经常使用遮罩层展示重要信息,同时屏蔽对下层页面的操作,其中一个可以提升用户体验感的地方就是点击非内容区域关闭遮罩层,本文就提供三种思路,四种实现方案。

其中遮罩层样式如下:

<style lang="less" scoped>
.maskParent {
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
  z-index: 998;
  background-color: #000;
  opacity: 0.6;
}
</style>

一、父节点为遮罩层,子节点为内容(事件委托)

<div class="maskParent">
  <div>内容</div>
</div>

事件委托有两种实现方案

第一种,利用event对象的target属性判断点击事件是否为遮罩层

<div class="maskParent" @click="handler">
  <div>内容</div>
</div>
<script>
function handler(event) {
  if (event.target === '父节点') {
    this.visible = false // 关闭遮罩层
  }
}
</script>

第二种,阻止内容区域click的事件冒泡

<div class="maskParent" @click="maskHandler">
  <div @click="handler">内容</div>
</div>
<script>
function handler(event) {
  event.stopPropagation()
  event.cancelBubble = true
}
function maskHandler() {
  this.visible = false
}
</script>

二、遮罩层和内容是兄弟节点,直接在遮罩层绑定click事件

<div class="maskParent" @click="maskHandler"></div>
<div @click="handler">内容</div>
<script>
function handler(event) {
  this.visible = false // 关闭遮罩层
}
</script>

三、死脑筋操作(不受节点限制)

根据鼠标点击坐标(clientX,clientY)判断是不是遮罩层非内容区域,感觉没人会用,拍脑袋想到的方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值