当前位置: 首页 > news >正文

DOM: EVENT FLOW

捕获阶段(capture phase)

捕获阶段的定义如下(w3c):The event object propagate through the target's ancestors from the defaultView to the target's parent.

事件对象在事件目标的祖先中上到下顺向传播,从最顶层的defaultView到事件目标的(直系)父元素。
捕获阶段发生在整个事件流动的开始。在这阶段里事件会从父(主干)到子(分支)由上往下传播,被元素一层层地捕获。
文章开头的例子里面,捕获阶段的click事件会依次在document、body、div上触发:
复制代码
document    1
  v
body    2
  v
div    3
  v
button
复制代码

 

一般没太大需要监听捕获阶段的事件;如果确实希望这么做,需要将 addEventListener的第三个参数设置为true:
 
// 第三个参数设置是否为捕获阶段,默认为false
element.addEventListener('click', function() {}, true)

目标阶段(target phase)

目标阶段的定义是(w3c):The event object arrive at the event object's event target.事件对象到达事件目标。

例子里面,就是事件在button上触发的。addEventListener可以监听目标阶段的事件:

element.addEventListener('click', function() {})

如果事件是不可冒泡的,那整个事件流动会到此为止,不会发生下面的冒泡阶段。

冒泡阶段(bubble phase)

冒泡阶段的定义(w3c):The event object propagates through the target's ancestors in reverse order, starting with the target's parent and ending with the defaultView.

事件对象会在事件目标的祖先元素里反向传播,由开始的父元素到最后的defaultView(document)。

冒泡阶段发生在最后,在这阶段里事件会从子(分支)到父(主干)逆向传播,看起来像是一个水里的泡泡往上冒。
例子里面,冒泡阶段的click事件会依次在div、body、document上触发:

复制代码
document    3
  ^
body    2
  ^
div    1
  ^
button
复制代码

"bubbles"

Event下的bubbles属性标明该事件是否为可冒泡的。一旦该值为false,则说明 evnet不可冒泡,那其流动也会在第二阶段“目标阶段”后就终止。

 
 
摘自:
作者:butterandfly
链接:https://www.jianshu.com/p/382895a4027d
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处

转载于:https://www.cnblogs.com/lilinhan/p/10185550.html

相关文章:

  • 在windows10上利用Anaconda 搭建python3.6 + tensorflow环境
  • 修复win10无法双击打开txt文档.reg
  • JS的运行机制的总结!
  • 从SQL Server CloudDBA 看云数据库智能化
  • 夯实爪哇基础-数据类型,内存
  • Hibernate关联关系注解配置简单理解
  • 五大好用的开源MySQL管理工具推荐
  • day--42 前端基础小结
  • 【python】【基础】mac安装python3及pip
  • Using system view: sys.sysprocesses to check SqlServer's block and deadlock
  • JavaScript中for in 和for of的区别
  • 对于你们驳来驳去的《停止学习框架》,我有话说!
  • Linux下调整ext3分区大小【转】
  • 大快搜索获评“2018中国大数据基础软件领域领军企业”
  • leetcode讲解--894. All Possible Full Binary Trees
  • hexo+github搭建个人博客
  • Apache Pulsar 2.1 重磅发布
  • download使用浅析
  • ES6语法详解(一)
  • Javascript基础之Array数组API
  • JavaScript设计模式之工厂模式
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Just for fun——迅速写完快速排序
  • leetcode46 Permutation 排列组合
  • leetcode98. Validate Binary Search Tree
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • vue--为什么data属性必须是一个函数
  • Vue组件定义
  • 大主子表关联的性能优化方法
  • 前端性能优化——回流与重绘
  • 提醒我喝水chrome插件开发指南
  • 学习笔记TF060:图像语音结合,看图说话
  • 仓管云——企业云erp功能有哪些?
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 数论-逆元
  • #Linux(权限管理)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C语言)fread与fwrite详解
  • (C语言)球球大作战
  • (笔试题)合法字符串
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十一)手动添加用户和文件的特殊权限
  • (算法二)滑动窗口
  • (转)Mysql的优化设置
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .axf 转化 .bin文件 的方法
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net6Api后台+uniapp导出Excel
  • .NET文档生成工具ADB使用图文教程
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • /etc/sudoers (root权限管理)
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @ConfigurationProperties注解对数据的自动封装