1.事件模型
DOM 事件级别:
DOM0 element.onclick=function(){}
DOM1 标准没有涉及事件的提案。
DOM2 element.addEventListener(‘click’,function(){},false)
DOM3 element.addEventListener(‘keyup’,function(){},false) //增加了更多类型
事件模型:捕获(上到下), 冒泡(下到上)
事件流: 捕获 目标阶段 冒泡
描述 DOM 事件捕获的具体流程:window -> document -> html -> body -> … -> 目标元素/ev。
1 | /* |
2.事件对象
DOM事件模型中的事件对象常用属性:
- type // 用于获取事件类型
- target // 获取事件目标(当前被点击的元素)
- stopPropagation() // 阻止事件冒泡
- preventDefault() // 阻止默认事件
- currentTarget //当前绑定的事件
- stopImmediatePropagation() //A中阻止B执行(事件响应优先级)
IE事件模型中的事件对象常用属性:
- type // 用于获取事件类型
- srcElement //获取事件目标
- cancelBubble //阻止事件冒泡
- returnValue //阻止事件默认行为
3.事件委托/代理
优势:
- 省内存减少事件注册,
- 新增子对象时无需再次对其绑定事件,适合动态添加元素
1 | <ul id="parent"> |
4.实现事件模型
编写 bind 绑定,trigger 触发函数
1 | function Emitter() { |
5.事件广播
1 | // 自定义事件 |
Reference:
https://javascript.ruanyifeng.com/dom/event.html
https://www.cnblogs.com/pcd12321/p/5223347.html
https://segmentfault.com/a/1190000006934031#articleHeader10
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events