[TOC]
# 1. 事件三要素
1. 事件源:触发(被)事件的元素
2. 事件类型:事件的触发方式(例如鼠标点击或键盘点击)
3. 事件处理程序:事件触发后要执行的代码(函数形式)
# 2. 注册事件/移除事件三方式
```js
var box = document.getElementById('box');
// 注册方式1
box.onclick = function () {
console.log('点击后执行');
};
// 移除方式1
box.onclick = null;
// 注册方式2
box.addEventListener('click', eventCode, false);
// 移除方式2
box.removeEventListener('click', eventCode, false);
// 注册方式3
box.attachEvent('onclick', eventCode);
// 移除方式3
box.detachEvent('onclick', eventCode);
function eventCode() {
console.log('点击后执行');
}
```
# 3. 为标签绑定任何事件(兼容处理)
```js
// 可以为标签添加任何一种事件
function addAnyEventListener(element, eventType, fn) {
if (element.addEventListener) { // 需要判断浏览器是否支持当前的事件类型
element.addEventListener(eventType, fn, false);
} else if (element.attachEvent){
element.attachEvent('on' + eventType,fn);
} else {
element['on'+eventType] = fn; // 相当于给对象element赋值fn,如ele = {eventType: fun}
}
}
// 可以为标签移除任何一种事件
function removeAnyEventListener(element, eventType, fn) {
if (element.removeEventListener) {
element.removeEventListener(eventType, fn, false);
} else if (element.detachEvent) {
element.detachEvent('on' + eventType, fn);
} else {
element['on'+eventType] = null;
}
}
```
# 4. 事件的三个阶段
1. 捕获阶段
2. 当前目标阶段
3. 冒泡阶段
event.eventPhase属性可以查看事件触发时所处的阶段
**`事件的三个阶段.html`**
```js
<pre>
事件共有三个阶段:
1.事件捕获阶段 :从外向内
2.事件目标阶段 :最开始选择的那个
3.事件冒泡阶段 : 从里向外
addEventListener(event, function, useCapture)中的useCaptrue就是设置捕获阶段或冒泡阶段的。
通过e.eventPhase这个属性可以知道当前的事件是什么阶段的:
如果这个属性的值是:
1---->捕获阶段
2---->目标阶段
3---->冒泡
一般默认都是冒泡阶段,很少用捕获阶段
冒泡阶段:从里向外
捕获阶段:从外向内
</pre>
<script type="text/javascript">
document.getElementById("div1").onclick = function(e) {
console.log(e.eventPhase);
}
document.getElementById("div1").onclick = function(e) {
console.log(e.eventPhase);
}
document.getElementById("div1").onclick = function(e) {
console.log(e.eventPhase);
}
</script>
```
- js应用场景
- js组成
- js书写位置
- 浮点数精度问题
- undefined与null的区别
- 数据类型转换
- 运算符优先级
- 代码调试
- 函数
- 函数的定义和调用
- 函数的return细节
- 函数是一种数据类型
- this的指向
- 函数成员
- 函数闭包
- 作用域
- 预解析
- js对象
- 对象的创建与调用
- new关键字
- this关键字
- 构造函数创建对象
- 事件
- 数据类型
- 继承
- 杂项
- 如何阻止标签的默认行为
- 为一个标签绑定或移除任何一个事件
- 如何阻止事件的冒泡行为
- 事件的三个阶段
- 移动元素的条件
- 匀速动画函数封装
- 变速动画函数封装
- 获取元素的css属性值
- 数据类型判断方法
- 创建对象的7种写法
- 如何继承
- 为js内置对象添加原型函数
- 将局部变量转换为全局变量
- call函数的用法
- 沙箱
- 浅拷贝
- 深拷贝
- 对象赋值会改变对象
- 解析URL中的字符串
- 格式化日期
- 获取当前浏览器类型
- Vue3.x
- 调式工具Vue Devtools