5.13 事件流
Posted xiaokeai233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.13 事件流相关的知识,希望对你有一定的参考价值。
# 事件
## 一、事件的介绍
1. 事件的组成
- 事件源:obox,绑定事件的元素。注意:事件目标,不是任何时候都等同于事件源。一般情况下是一个。
- 绑定事件的方式:on,赋值式绑定
- 事件类型:click,行为方式
- 赋值:= ,赋值式绑定事件的标志之一
- 事件处理函数:function(){console.log("点了一下")},触发指定行为时,要做的事情
- 隐藏的部分:事件对象
## 一、事件的介绍
1. 事件的组成
- 事件源:obox,绑定事件的元素。注意:事件目标,不是任何时候都等同于事件源。一般情况下是一个。
- 绑定事件的方式:on,赋值式绑定
- 事件类型:click,行为方式
- 赋值:= ,赋值式绑定事件的标志之一
- 事件处理函数:function(){console.log("点了一下")},触发指定行为时,要做的事情
- 隐藏的部分:事件对象
2. 事件对象的介绍
- 事件发生时产生的对象,用来记录事件发生时产生的信息
- 默认隐藏,需要主动获取
- 事件对象的获取
- 兼容
```js
obox.onclick = function(eve){
var e = eve || window.event;
console.log(e);
}
```
- 事件对象,事件的对象,没有事件,不会有对象,所以,只能在事件处理函数中才能拿到事件对象,事件结束后,事件对象被浏览器回收
- 每次开启事件,会产生不同的事件对象
- 事件发生时产生的对象,用来记录事件发生时产生的信息
- 默认隐藏,需要主动获取
- 事件对象的获取
- 兼容
```js
obox.onclick = function(eve){
var e = eve || window.event;
console.log(e);
}
```
- 事件对象,事件的对象,没有事件,不会有对象,所以,只能在事件处理函数中才能拿到事件对象,事件结束后,事件对象被浏览器回收
- 每次开启事件,会产生不同的事件对象
3. 事件对象身上的信息(属性)
1. 鼠标事件对象的坐标类
- 相对于**事件目标**的坐标
- e.offsetX/Y
- 相对于浏览器的可视区域的坐标
- e.clientX/Y
- 相对于页面
- e.pageX/Y
- 相对于显示器的坐标
- e.screenX/Y
2. 键盘事件对象的keyCode
- 获取任意按键的ASC码
- e.keyCode
- 获取功能按键的状态:布尔值
- e.ctrlKey
- e.shiftKey
- e.altKey
1. 鼠标事件对象的坐标类
- 相对于**事件目标**的坐标
- e.offsetX/Y
- 相对于浏览器的可视区域的坐标
- e.clientX/Y
- 相对于页面
- e.pageX/Y
- 相对于显示器的坐标
- e.screenX/Y
2. 键盘事件对象的keyCode
- 获取任意按键的ASC码
- e.keyCode
- 获取功能按键的状态:布尔值
- e.ctrlKey
- e.shiftKey
- e.altKey
4. 事件流
- 事件被触发的顺序
- 从里向外:事件冒泡:一个元素的事件被触发后,会依次向上触发**所有** **父**元素的**相同**事件
- 从外向内:事件捕获:一个元素的事件被触发后,会从根元素依次向内触发**所有** **关联子**元素的**相同**事件,直到发生事件的元素
- 当前真正触发事件的元素:目标元素,发生在目标元素身上的事件,叫目标事件
- 事件被触发的顺序
- 从里向外:事件冒泡:一个元素的事件被触发后,会依次向上触发**所有** **父**元素的**相同**事件
- 从外向内:事件捕获:一个元素的事件被触发后,会从根元素依次向内触发**所有** **关联子**元素的**相同**事件,直到发生事件的元素
- 当前真正触发事件的元素:目标元素,发生在目标元素身上的事件,叫目标事件
- 执行顺序
1. 捕获
2. 目标
3. 冒泡
1. 捕获
2. 目标
3. 冒泡
- 事件冒泡
- 微软提出:页面上的元素关系,既然是包含关系,那么在触发某个元素的事件时,应该像:飞镖扎中靶子时,如果扎中的是十环,那么九环也相当于被扎中了,依次向上,八环,七环....整个靶子,都被扎中了
- 事件冒泡:一个元素的事件被触发后,会依次向上触发**所有** **父**元素的**相同**事件
- 不好:
- 根据需要,阻止事件冒泡
```js
function stopBubble(e){
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble = true;
}
}
```
- 事件捕获
- 一般不会被主动触发,也不会被默认绑定,而且,IE浏览器没有捕获状态,IE只有冒泡
- 所以如果想实现事件捕获,需要配合事件监听式绑定方法(addEventListener)
- addEventListener的用法,见下一个知识点
- 微软提出:页面上的元素关系,既然是包含关系,那么在触发某个元素的事件时,应该像:飞镖扎中靶子时,如果扎中的是十环,那么九环也相当于被扎中了,依次向上,八环,七环....整个靶子,都被扎中了
- 事件冒泡:一个元素的事件被触发后,会依次向上触发**所有** **父**元素的**相同**事件
- 不好:
- 根据需要,阻止事件冒泡
```js
function stopBubble(e){
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble = true;
}
}
```
- 事件捕获
- 一般不会被主动触发,也不会被默认绑定,而且,IE浏览器没有捕获状态,IE只有冒泡
- 所以如果想实现事件捕获,需要配合事件监听式绑定方法(addEventListener)
- addEventListener的用法,见下一个知识点
5. 事件的绑定方式
- 事件绑定常见分为两种:DOM0级,DOM2级
- DOM0级:赋值式绑定,on绑定:
- 绑定方式:只能绑定一个事件处理函数,因为赋值会覆盖
- 元素.onclick = function(){}
- 删除方式:利用赋值,覆盖
- 元素.onclick = null;
- 事件绑定常见分为两种:DOM0级,DOM2级
- DOM0级:赋值式绑定,on绑定:
- 绑定方式:只能绑定一个事件处理函数,因为赋值会覆盖
- 元素.onclick = function(){}
- 删除方式:利用赋值,覆盖
- 元素.onclick = null;
- DOM2级:监听式绑定,长长的单词方法
- 绑定方式:可以重复绑定
- 元素.addEventListener(参数1, 参数2, 参数3)
- 参数1:事件类型,注意:没有on
- 参数2:事件处理函数
- 参数3:布尔值:true捕获,false冒泡
- 删除方式:
- 元素.removeEventListener(参数1, 参数2, 参数3);
- 参数1:要删除的事件类型,注意:没有on
- 参数2:要删除的事件处理函数,注意:必须得和绑定时的事件处理函数是一个
- 如果要删除,建议提前起名,不需要删除,无所谓
- 参数3:要删除的是在哪个事件流状态的事件。布尔值:true捕获,false冒泡
- 绑定方式:可以重复绑定
- 元素.addEventListener(参数1, 参数2, 参数3)
- 参数1:事件类型,注意:没有on
- 参数2:事件处理函数
- 参数3:布尔值:true捕获,false冒泡
- 删除方式:
- 元素.removeEventListener(参数1, 参数2, 参数3);
- 参数1:要删除的事件类型,注意:没有on
- 参数2:要删除的事件处理函数,注意:必须得和绑定时的事件处理函数是一个
- 如果要删除,建议提前起名,不需要删除,无所谓
- 参数3:要删除的是在哪个事件流状态的事件。布尔值:true捕获,false冒泡
- 注意:addEventListener和removeEventListener在IE低版本浏览器下不支持
- 如何选择,根据特点,按需选择
以上是关于5.13 事件流的主要内容,如果未能解决你的问题,请参考以下文章