【JS】JavaScript实现点击自定义区域空白处隐藏div

点击空白处隐藏 div

前言

点击选择框,显示/隐藏颜色选择器
点击除了颜色选择器(< SketchPicker />)的地方,使其隐藏

未点击前效果如下:

在这里插入图片描述
展开后效果:
在这里插入图片描述
点击除了颜色选择器的任何区域,可将其隐藏

实现

方法一:JQuery实现(不建议)

// jquery写法
$(function () {
$(".color_select").click(function (event) {
  //取消事件冒泡
  event.stopPropagation()
  //按钮的toggle,如果div是可见的,点击按钮切换为隐藏的;如果是隐藏的,切换为可见的。
  $("#secondMenu").slideToggle("slow")
  setshowBCPicker(!showBCPicker)
  colorType == "color"
  ? setshowBCPicker(!showBCPicker)
  : setshowTCPicker(!showTCPicker)
  return false
  })
  //点击空白处隐藏弹出层,下面为滑动消失效果和淡出消失效果。
  $(document).click(function (event) {
  var _con = $(".color_select") // 设置目标区域
  if (!_con.is(event.target) && _con.has(event.target).length === 0) {
  $("#view").slideUp("slow") //滑动消失
  setshowBCPicker(false)
  colorType == "color" ? setshowBCPicker(false) : setshowTCPicker(false)
  $('#view').hide(1000);          //淡出消失
  }
 })
})

总结:可以实现 但性能消耗过大,一旦连续触发三次以上,页面直接无响应

方法二:React写法(Vue应该也适用)

  1. 定义函数 用于循环查找指定标签
const getShow = () => {
    var e = window.event //浏览器兼容性
    var elem = e.target
    while (elem) {
      //循环判断至跟节点,防止点击的是div子元素
      // 背景色
      if (elem.id && elem.id === "judge_bg") {
     		// 因为点击select本身会控制显示/隐藏,故取反
        setshowBCPicker(!showBCPicker)
        return
      } else {
        setshowBCPicker(false)
      }
      if (elem.id && elem.id === "judge_bg_sk") {
        setshowBCPicker(true)
        return
      }
      // 主题色
      if (elem.id && elem.id === "judge_tc") {
        setshowTCPicker(!showTCPicker)
        return
      } else {
        setshowTCPicker(false)
      }
      if (elem.id && elem.id === "judge_tc_sk") {
        setshowTCPicker(true)
        return
      }
      elem = elem.parentNode
    }
  }
  1. 将函数绑定给想要监听的区域中最大的父元素

在这里插入图片描述

  1. 注意一定要用id选择器,尝试使用class类选择器,但未生效

在这里插入图片描述

总结: 性能消耗小 多次频繁切换不会卡顿 推荐该种写法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田本初

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值