美文网首页
点击别处关闭浮层

点击别处关闭浮层

作者: 是刘快啊 | 来源:发表于2018-04-22 23:18 被阅读0次

需求:点击button出现浮层,点击别处关闭浮层。
我们有一个按钮和一个浮层,浮层内为一个checkbox,浮层默认不显示:

<div id="wrapper" class="wrapper">
    <button id="clickMe">点我</button>
    <div id="popover" class="popover">
        <input type="checkbox">浮层
    </div>
</div>
.wrapper{
  position: relative;
  display: inline-block;
}
.popover{
  position: absolute;
  border: 1px solid red;
  padding: 10px;
  margin-left: 1px;
  left: 100%;
  top: 0;
  white-space: nowrap;
  background: white;
  display: none;
}

方案一:监听button和document,button被点击时浮层显示,document除button和浮层以外的地方被点击是,浮层隐藏。

clickMe.addEventListener('click', function(){
  popover.style.display = 'block'
})
wrapper.addEventListener('click', function(e){
  e.stopPropagation()
}) //阻止冒泡
document.addEventListener('click', function(){
  popover.style.display = 'none'
})
  • 阻止冒泡:在冒泡阶段执行函数,即先执行clickMe中的函数,给浮层添加block,如果不阻止冒泡,会继续向上,到document中时再执行其中的函数,使浮层又变为display: none;
  • 监听document或监听html都是可以的,(document.documentElement.addEventListener()),但是如果监听body要注意body的高度。
  • 每次点击document都会被监听,浪费内存。

方案二:用jQuery 只有在浮层显示的时候监听一次document。

$(clickMe).on('click', function(){
  $(popover).show()
  console.log('block')
  $(document).one('click', function(){
    $(popover).hide()
  }) //只在浮层show的时候监听一次document
})
$(wrapper).on('click', function(e){
  e.stopPropagation()
})
  • 只有在浮层show的时候监听一次document,也就是:点击button,浮层显示 => 监听document => 点击别处,浮层隐藏 => 不再监听document,节省内存;
  • 注意不能写成$(wrapper).on('click', false),因为这样写会同时阻止冒泡和阻止默认事件,导致checkbox无法选中。

相关文章

  • 从“点击别处关闭浮层”了解事件传播机制

    写出一个点开浮层、关闭浮层的例子,要求:1)点击按钮弹出浮层2)点击别处关闭浮层3)点击浮层时,浮层不得关闭4)再...

  • 制作点击按钮触发浮层

    1.做到点击按钮开启浮层 2.做到点击按钮开启浮层,再次点击关闭浮层 3.做到点击别处关闭浮层 4.最终做到-点击...

  • 点击别处关闭浮层

    需求:点击button出现浮层,点击别处关闭浮层。我们有一个按钮和一个浮层,浮层内为一个checkbox,浮层默认...

  • 触发 / 关闭浮层

    实现功能:点击按钮触发浮层,点击别处关闭浮层。 html 代码: 部分 css 代码: 1. 方案一 --- 用 ...

  • DOM事件实例

    点击别处关闭浮层 Ⅰ. 思路1 阻止冒泡 stopPropagation() 案例点这里 bug:同样地,点击浮...

  • DOM事件、事件流

    制作“点击别处关闭浮层”效果 debugger event.stopPropagation()这个方法用于阻止事件...

  • DOM事件笔记

    点击别处关闭浮层 1.阻止事件传播(stopPropagation) 阻止冒泡,不通知父级元素代码(documen...

  • task33 进阶:DOM 事件

    上一次课程的dom events知识? 用实际例子学习dom事件模型——点击别处关闭浮层的效果搜 bootstra...

  • DOM 事件模型2:阻止冒泡,popover

    从popover(点击别处关闭浮层)理解冒泡与捕获 当几个DIV嵌套,触发事件时,是先进行捕获阶段的触发,再进行冒...

  • 点击别处关闭浮层(对DOM冒泡的深入理解)

    如果JS不加 点击点我按钮浮层不能显示,因为根据DOM冒泡模型,一旦点击了clickMe的button按钮,则它的...

网友评论

      本文标题:点击别处关闭浮层

      本文链接:https://www.haomeiwen.com/subject/egphlftx.html