jquery 开启一个 div 后要将它隐藏,是否有更好的做法?

火爆浪子
  • 2.8k

范例
https://stackoverflow.com/

先登入,右上角点汉堡排后
随意点击任何一处,都可以将 div 移除
用谷歌检查确实没有一个 div 去触发这个移除事件
但我现在的做法是
当点击后出现 div ,背景会有一个透明的 div
当滑鼠移动到这个透明 div (或是点击这个 div)
就会把汉堡排出来的 div 跟 透明 div 本身一起移除
我好奇要怎么做到像不需要另外开 div 事件就可以移除

https://segmentfault.com/ 也是一樣做法

回复
阅读 1.2k
2 个回答

之前做手机H5经常会有这种需求

<div class="mask">  <!--遮罩-->
    <div class="content"></div> <!--内容-->
</div>
  1. 给mask加上点击事件,点击时关闭mask
  2. 给content加上点击事件,必须阻止事件冒泡防止点击内容时mask也收到点击事件
<button class="btn">
  打开浮层
</button>
<div class="mask">
  <div class="content">
    Content
  </div>
</div>
$(function() {
  $('.content').on('click', function(e) {
    // 停止事件冒泡,防止.mask点击被触发
    e.stopPropagation();
    alert('您点击了内容');
  });
  $('.mask').on('click', function() {
    // 点击内容外部时关闭内容
    $(this).hide();
  });
  $('.btn').on('click', function() {
    $('.mask').show();
  });
});
body {
  background: white;
}

.mask {
  display: none;
  position: fixed;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, .1);
  left: 0;
  top: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1;
  .content {
    width: 100px;
    height: 100px;
    background: white;
    border-radius: 8px;
    text-align: center;
    line-height: 100px;
  }
}
document.body.on('click',function(){
    $('div').hide()
}
)
你知道吗?

宣传栏