# DOM 事件
- 事件流
- 事件注册
- 事件对象
- 事件分类
- 事件代理
## dom事件流
dom事件流就是对dom事件的处理过程
- capture phase (捕获,向下捕获,直到捕获到触发事件节点的父元素)
- target phase(事件触发过程)
- bubble phase(冒泡过程,触发事件节点的父元素直到顶层window)
## 事件注册与触发
- 事件注册
- 取消事件注册
- 事件触发
事件注册
- eventTarget.addEventListener(type, listener[, useCapture])
- elem.onclick = fun
取消事件注册
- eventTarget.removeEventListener(type, listener[, useCapture])
- elem.onclick = null
事件触发
- eventaTarget.dispatchEvent(type)
## 事件对象
event对象
- 属性
- type(事件类型)
- target(srcElement, 触发的节点)
- currentTraget(当前处理事件的节点)
- 方法
- stopPropagation(阻止冒泡)
- preventDefault(阻止默认行为)
- stopImmediatePropagation(阻止冒泡,阻止后续事件)
target在事件流的目标阶段;currentTarget在事件流的捕获,目标及冒泡阶段。只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的对象而currentTarget指向当前事件活动的对象(一般为父级)。
## 事件分类
DOM事件分类及继承关系;鼠标事件类型、鼠标事件对象、鼠标事件举例;键盘、输入、焦点事件类型、事件对象、事件举例;其他常用事件
![事件分类](https://box.kancloud.cn/7af797067c505b5c767839445d76acd1_960x487.png)
event(基本事件)
![event事件](https://box.kancloud.cn/bf0565a3be0ada0a5808479f7d3bc210_955x476.png)
window
- load
- unload
- error
- abort
Image
- load
- error
- abort
``` html
<image alt="photo" src="http://foo" onerror="this.src='http://bar'" />
```
UIEvent
![UIEvent](https://box.kancloud.cn/4d7af968a9a7f68c9cf8a482be72605b_946x261.png)
MouseEvent
![mouseEvent](https://box.kancloud.cn/b47e1b178e2ff97dd0372c7d59f94ec3_919x529.png)
MouseEvent对象
- 属性
- clientX,clientY
- screenX,screenY
- ctrlKey, shiftKey, altKey, metaKey
- button(0,1,2)
MouseEvent顺序
![mouseEvent顺序](https://box.kancloud.cn/2fff38dcd5ca7dd622eb4440fcc3610f_774x424.png)
![拖拽div](https://box.kancloud.cn/a87a679b567d13a42aeaa138094e84ab_949x535.png)
WheelEvent
![WheelEvent](https://box.kancloud.cn/83668bc8d06f78c7f608bbd465637fa0_941x266.png)
WheelEvent对象
- 属性
- deltaMode
- deltaX
- deltaY
- delatZ
## FocusEvent
| 事件类型| 是否冒泡 | 元素| 默认事件| 元素例子|
| ------ | ------| ------ | ------ | ------ |
| blur| NO| Window, Element|None|window, input|
| focus| NO| Window, Element|None|window, input|
| foucusin| NO| Window, Element|None|window, input|
| focusout| NO| Window, Element|None|window, input|
属性
- relatedTarget(返回当前事件涉及到的其他DOM元素)
## InputEvent
| 事件类型| 是否冒泡 | 元素| 默认事件| 元素例子|
| ------ | ------| ------ | ------ | ------ |
| beforeinput| YES| Element|update DOM Element|input|
| input| YES| Element|None |input|
## keyboardEvent
| 事件类型| 是否冒泡 | 元素| 默认事件| 元素例子|
| ------ | ------| ------ | ------ | ------ |
| keydown| YES| Element|beforeinput/input focus/blur activation|div,input|
| keyup| None| Element|None |div,input|
属性
- key
- code
- ctrlKey, shiftKey, altKey, metaKey
- repeat(持续按一个键)
- keyCode
- charCode
- which
## 事件代理
将事件注册到元素的父节点上
``` html
<ul>
<li></li>
<li></li>
<li></li>
</ul>
```
- 页面制作
- HTML
- 标签
- css
- 选择器
- 文本
- 盒模型
- 背景
- 布局
- 变形
- 过渡和动画
- JavaScript程序设计
- 基础篇
- 基本语法
- 基本类型
- 运算符与表达式
- 语句
- 数值
- 字符串
- 对象
- 数组
- 函数
- Date
- RegExp
- JSON
- 进阶篇
- 类型进阶
- 函数进阶
- 原型
- 变量作用域
- 闭包
- 面向对象
- DOM编程艺术
- 基础篇
- 文档树
- 节点操作
- 属性操作
- 样式操作
- 事件
- 数据通信
- 数据存储
- 动画
- 音频与视频
- canvas
- BOM
- 表单操作
- 列表操作
- 实践篇
- 组件实践
- 页面架构
- CSS Reset
- 布局解决方案
- 居中布局
- 多列布局
- 全屏布局
- 响应式
- 页面优化
- 规范与模块化
- 规范
- 模块化
- 产品前端架构
- 协作流程
- WEB系统
- 角色定义
- 协作流程
- 职责说明
- 接口设计
- 接口规范
- 规范应用
- 本地开发
- 版本管理
- 分支模型
- git
- 技术选型
- 模块化
- 框架
- 开发实践
- 系统设计
- 系统实现
- 测试发布