js,判断点击冒泡事件结束,判断点击的位置在元素外部

今天想做一个功能,当我点击某个框外部时使框的颜色改变达到看上去未选中的效果。我的思路是通过冒泡事件来判断该元素是否在所有冒泡的元素内,此时就需要知道一轮冒泡事件何时结束才能判断。

由于点击的冒泡事件是从上往下,由内到外的,所以其实只需要在body身上添加点击事件,将body作为冒泡的最底层就能达到这个效果。

eles = document.querySelectorAll("*")
body = document.querySelector("body")         //获取底层元素
target = document.querySelector("#target")    //获取目标元素

judge = []                                    //闭包判断一次冒泡所涉及的元素

for (i=0; i<eles.length; i++) {
    eles[i].onclick = function(ev) {
        judge.push(this)                      //将冒泡过的元素加入列表
    }
}
body.onclick = function () {
    if (!judge.includes(target)) {            //判断目标元素是否在列表内
        console.log("在目标元素外")
    } else {
        console.log("在目标元素内")
    }
    judge.splice(0, judge.length)             //一轮冒泡结束,清空冒泡元素的列表
}

可能这个功能还有别的实现办法,但是判断冒泡结束的目的达到了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值