美文网首页
捕获、冒泡

捕获、冒泡

作者: 凉城十月 | 来源:发表于2020-08-16 23:12 被阅读0次

先捕获后冒泡

捕获冒泡示意图
函数addEventListener(‘click’,function(){}, false),最后可以传一个参数,
默认不传就是false或者传falsy值从内往外执行,冒泡阶段false
truy值从外往内 执行,捕获阶段true

特例:如果一个东西上面既有捕获也有冒泡,跟其他部分无关的时候,捕获和冒泡根据代码顺序执行。

实现点击出现浮层,点击别处关闭浮层的效果

捕获冒泡的例子:
HTML代码:

<div id="wrapper" class="wrapper">
    <button id="clickMe">点我</button>
    <div class="popover" id="popover">
      <input type="checkbox">叽里呱啦
    </div>
</div>

css代码:

.wrapper{
  display: inline-block;
  position: relative;
}
.popover{
  margin-left: 10px;
  border: 1px solid red;
  position: absolute;
  left: 100%;
  top: 0;
  white-space:nowrap;
  padding: 20px;  
  background: white;
  display: none;
}
.popover::before{
  content:'';
  position:absolute;
  top:5px;
  right: 100%;
  border: 10px solid transparent;
  border-right-color: red;
}
.popover::after{
  content:'';
  position:absolute;
  top:5px;
  right: 100%;
  border: 10px solid transparent;
  border-right-color: white;
  margin-right: -1px;
}

JS代码【不用jQuery】:点击按钮打开浮层,点击按钮和浮层以外的地方关闭浮层

clickMe.onclick = function(e){
  popover.style.display = 'block'
//e.stopPropagation()//这句话不写在这里是因为在这里阻止了冒泡,点击浮层还是会关闭浮层,不是我们想要的效果
}
wrapper.onclick = function(e){
  e.stopPropagation() //阻止冒泡
}
document.onclick = function(){
  popover.style.display='none'
}

这里如果不加阻止冒泡的话,点击按钮,事件冒泡出去,会在一瞬间,先执行clickMe的点击事件,再立马执行document的点击事件。肉眼看上去是页面没有任何反应,所以要阻断document层的冒泡。
JS代码【用jQuery】:

$(clickMe).on('click', function(e) {
  $(popover).show()
  //在浮层打开后再启用,节省内存
  $(document).one('click', function(e) {
    $(popover).hide()//并非异步代码,在冒泡结束之前就执行,两种办法:阻止冒泡和setTimeout,在0秒钟后尽快执行
  })
})
$(wrapper).on('click', (e)=>{
  e.stopPropagation()
}

存在一个bug,如果``wrapper`的点击事件改成

$(wrapper).on('click', false); //多选框不能选中

这样写,这个false表示

function(e){
  e.stopPropagation()  //阻止冒泡
  e.preventDefault()  //阻止默认
}

同时阻止了冒泡和默认事件,意思是同时阻止了多选框的选中。
在上述代码中,我们只需要阻止冒泡即可。

相关文章

  • Javascript DOM事件流向

    事件流向 先捕获然后处理,然后再冒泡出去 addEventListener false冒泡 true捕获 事件捕获...

  • 【DOM】 标准事件流 / 事件机制

    什么是捕获,什么是冒泡;是先捕获还是先冒泡? 捕获 捕获是从A -> B -> C;看有没有函数监听由网景公司提出...

  • 捕获和冒泡

    捕获:从外向内冒泡:从内向外 在一个事件发生时,捕获过程跟冒泡过程总是先后发生,跟你是否监听毫无关联,先捕获后冒泡...

  • 捕获、冒泡

    先捕获后冒泡 函数 ,最后可以传一个参数, 就是false或者传 是 执行, 是 执行, 。 特例:如果一个东西上...

  • JavaScript 事件捕获和冒泡

    JavaScript 事件捕获和冒泡 规范 在最新的 DOM 规范中,事件的捕获与冒泡是通过 addEventLi...

  • 事件冒泡和事件捕获

    事件冒泡和事件捕获

  • 浏览器事件执行顺序

    总结:从捕获到冒泡

  • day29-web前端之jQuery及Ajax

    1事件冒泡和捕获 1.1.事件冒泡:在子标签中产生的事件会传递给父标签 1.2事件捕获 捕获事件-阻止事件从子标签...

  • DOM 事件模型/ DOM 事件机制

    请描述:什么是捕获,什么是冒泡并说一下是先捕获还是先冒泡 捕获 捕获就是由外向内,从第一层 >> 第二层 >> 第...

  • DOM的事件模型和DOM事件流

    DOM的事件模型 DOM事件模型包括捕获和冒泡(ie用的是事件冒泡),捕获是从上往下到达目标元素,冒泡是从当前元素...

网友评论

      本文标题:捕获、冒泡

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