JavaScript之事件机制、事件流、事件机制、鼠标事件,键盘事件

addEventListener 事件监听方式 

eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数。

该方法接收三个参数:

type:事件类型字符串,比如 click 、mouseover ,注意这里不要带 on

listener:事件处理函数,事件发生时,会调用该监听函数

useCapture:可选参数,是一个布尔值,默认是 false

eventTarget.attachEvent()方法将指定的监听器注册到 eventTarget(目标对象) 上,当该对象触发指定的事件时,指定的回调函数就会被执行。

该方法接收两个参数:

eventNameWithOn:事件类型字符串,比如 onclick 、onmouseover ,这里要带 on

callback: 事件处理函数,当目标触发事件时回调函数被调用

注意:IE8 及早期版本支持

11b5476a172644f5bcaa3c3e70c788ab.png

 删除事件的方式

ae91de85f1fe47d589751255e7a31ace.png

DOM 事件流

事件流描述的是从页面中接收事件的顺序。

事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM 事件流。

比如我们给一个div 注册了点击事件:

DOM 事件流分为3个阶段: 

1. 捕获阶段

2. 当前目标阶段

3. 冒泡阶段

事件冒泡: IE 最早提出,事件开始时由最具体的元素接收,然后逐级向上传播到到 DOM 最顶层节点的过程。

事件捕获: 网景最早提出,由 DOM 最顶层节点开始,然后逐级向下传播到到最具体的元素接收的过程。

06bc6b88a1b84e998a07ef54de36aa9f.png

向水里面扔一块石头,首先它会有一个下降的过程,这个过程就可以理解为从最顶层向事件发生的最具体元素(目标点)的捕获过程;之后会产生泡泡,会在最低点( 最具体元素)之后漂浮到水面上,这个过程相当于事件冒泡

07162b35cf964623a128ea11b4b0dba7.png

事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM 事件流。

注意

JS 代码中只能执行捕获或者冒泡其中的一个阶段。

onclick 和 attachEvent 只能得到冒泡阶段。

addEventListener(type, listener[, useCapture])第三个参数如果是 true,表示在事件捕获阶段调用事件处理程序;如果是 false(不写默认就是false),表示在事件冒泡阶段调用事件处理程序。

实际开发中我们很少使用事件捕获,我们更关注事件冒泡。

有些事件是没有冒泡的,比如 onblur、onfocus、onmouseenter、onmouseleave

什么是事件对象

官方解释:event 对象代表事件的状态,比如键盘按键的状态、鼠标的位置、鼠标按钮的状态。

简单理解:事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象 event,它有很多属性和方法。

比如:  

1. 谁绑定了这个事件。

2. 鼠标触发事件的话,会得到鼠标的相关信息,如鼠标位置。

3. 键盘触发事件的话,会得到键盘的相关信息,如按了哪个键。

事件对象的使用语法

d5c471e64a5e4b67800594695d0f020f.png

74e4408fab054c0684e86cbc4f5c6ca7.png 

事件对象本身的获取存在兼容问题:

1. 标准浏览器中是浏览器给方法传递的参数,只需要定义形参 e 就可以获取到。

2. 在 IE6~8 中,浏览器不会给方法传递参数,如果需要的话,需要到 window.event 中获取查找。

解决: e = e || window.event;

e.target 和 this 的区别:

  this 是事件绑定的元素, 这个函数的调用者(绑定这个事件的元素) 

  e.target 是事件触发的元素。

6429c17a5e6a462180bfe17c32bf9a9b.png

事件对象的常见属性和方法

39a9fa6df15a4ffba54276bf87723e51.png

阻止事件冒泡的两种方式

事件冒泡:开始时由最具体的元素接收,然后逐级向上传播到到 DOM 最顶层节点。

事件冒泡本身的特性,会带来的坏处,也会带来的好处,需要我们灵活掌握。

57b9af23fa714d90b5ea38bef941dd9d.png

 阻止事件冒泡的兼容性解决方案

a0b617ef57c745459aef12ecd40209ec.png

26c74e697b484b2dbc53133127454cdf.png 

12493c80200f421390d0b15e20ec83f0.png 

事件委托

事件委托也称为事件代理, 在 jQuery 里面称为事件委派

事件委托的原理

不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。

以上案例:给 ul 注册点击事件,然后利用事件对象的 target 来找到当前点击的 li,因为点击 li,事件会冒泡到 ul 上, ul 有注册事件,就会触发事件监听器。

事件委托的作用

我们只操作了一次 DOM ,提高了程序的性能。

5956cc97c83e41149b2b3a265fdf77ae.png

常用的鼠标事件

a69660c3dd504762b978e902c7326f72.png

52c387ef51bb49b182629203c325ded0.png

event对象代表事件的状态,跟事件相关的一系列信息的集合。鼠标事件对象 MouseEvent 和键盘事件对象 KeyboardEvent

8b4a6e7f48274b21b3f2e18b5ba8b7ca.png

622a39811084451aaa2467e222919c38.png 

跟随鼠标移动

2be79858f24f49888d10fb2e740ce19b.png

事件除了使用鼠标触发,还可以使用键盘触发。

e20fcb1a46e646309ce08d8f55a3d816.png

注意: 

1. 如果使用addEventListener 不需要加 on

2. onkeypress 和前面2个的区别是,它不识别功能键,比如左右箭头,shift 等。

3.三个事件的执行顺序是: keydown -- keypress --- keyup

3cf79e6976864602834413d4a9837fd4.png

 7b4f033e2448487d908e2cdbc37377fa.jpg

 f3a077a51413489ba9fcb91790eb2aa3.png

模拟京东按键输入内容

5535bf6cac0545d3a84b18419e4fd42d.png

模拟京东快递单号查询案例

3d1b6a6142684fbf925a5f4ed97fc599.png

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值