浅谈事件冒泡
前端开发中不可避免会接触到事件冒泡,今天简单记录一下处理事件冒泡的一点经验,谈不上心得,聊当抛砖引玉。
不谈移动端,以PC浏览器的click事件为例。
事件冒泡机制最初是由微软提出的,而事件捕捉机制是由NetScape提出的,这两种机制是完全不同的事件流处理机制,平常较多地被认为是事件冒泡的两种方式,其实是不严谨的。
- 冒泡事件流
简单来讲,以click为例,冒泡事件流就是从被点击的节点一层层的向上冒泡,直到<body>
节点,这也是被大多数人熟知的方式,在此便不再赘述。
IE浏览器通过attachEvent()
和detachEvent()
方法来添加和删除事件监听。
- 捕捉事件流
NetScape提出的捕捉式事件流处理机制,跟冒泡事件流完全相反,是从最外层容器(也就是<body>
)开始往里传递事件。
IE内核以外的浏览器通过addEventListener()
来添加事件监听。
值得一提的是,addEventListener(type,handler,is)
有三个参数,前两个参数分别是事件类型和事件响应函数,第三个参数是个Boolean
值,被普遍使用的是false
,当它被设置为false的时候,捕捉事件流跟冒泡事件流的顺序是一致的,也就是从里往外传递。栗子如下:
See the Pen ZYGYxB by Joe (@ihardcoder) on CodePen.
弹出窗口的顺序为3-2-1。
当第三个参数被设置为true
时,便采用原始的捕捉事件流,也就是跟冒泡事件流相反的顺序,栗子如下:
See the Pen LEVEBm by Joe (@ihardcoder) on CodePen.
弹出窗口的顺序为1-2-3。
当然,平时被使用较广的是冒泡式的传递方式,但捕捉事件流也有其用武之地。IE9以上的浏览器也支持addEventListener()
方法。
- ASM 翻译系列第三十八弹:ASM数据清理
- 借助PageSpeed,为Nginx网站服务器提速
- DX-watermark插件无法预览及上传图片报imagesx()错误的解决办法
- 抓取占用CPU高的JAVA线程,进而找出有问题的WEB页面
- ASM 翻译系列第三十九弹:物理元数据AT表
- ASM 翻译系列第四十弹:理解ASM中 REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB的含义
- 给XFN链接关系加上“nofollow”选项
- LVS中采用Jboss作为RealServer的配置要点
- 基于Prometheus的数据库监控
- Uva-------(11462) Age Sort(计数排序)
- hdu----(2848)Repository(trie树变形)
- 【MySQL】主从GTID复制修复
- hdu---(1800)Flying to the Mars(trie树)
- 解决Tomcat数据连接池无法释放
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法