js-13-Js中的事件模型

本文详细介绍了JavaScript事件模型,包括事件与事件流、原始DOM0级事件模型(速度快但可能导致兼容问题)、标准DOM2级事件模型(支持多事件处理器和事件顺序控制)以及IE事件模型(仅用于特定情况)。重点讲解了事件的捕获和冒泡阶段以及事件绑定和移除方法。
摘要由CSDN通过智能技术生成

事件模型分为:事件与事件流、原始事件模型、标准事件模型和IE事件模型
1、事件与事件流
js中的事件,可以理解为是在HTML中文档或者浏览器中发生的一种交互操作,使得网页具备互动性,常见的有加载事件、鼠标事件、自定义事件等。
由于DOM是一个树结构,如果在父子节点绑定事件时候,当触发子节点的时候,就存在一个顺序问题,这涉及到了事件流的概念。
事件流都会经历以下三个阶段:
事件捕获阶段(capture phase)
处于目标阶段(target phase)
事件冒泡排序(bubbling phase)
在这里插入图片描述
事件冒泡是从下到上的传播方式,由最具体的元素(触发节点),然后逐渐向上传播到最不具体的那个节点,也就是DOM最高层的父节点。
在这里插入图片描述
然后,给button和它的父元素,加入点击事件
在这里插入图片描述
输出如下:
在这里插入图片描述
点击事件首先在button元素上发生,然后逐渐向上传播
事件捕获与事件冒泡相反,事件最开始由不太具体的节点最早接受的事件,而最具体的节点(触发节点)最后接受事件。
2、事件模型
事件模型可以分为以下三种:
原始事件模型(DOM0级)
标准事件模型(DOM2级)
IE事件模型(基本不用)

2.1原始事件模型
事件绑定监听函数函数比较简单,分为两种方式:
HTML中的直接绑定

在这里插入图片描述
通过js绑定
在这里插入图片描述
2.1.1.特性
绑定速度快
DOM0级事件具有很好的跨浏览器优势,会以最快的速度绑定,但由于绑定速度太快,可能页面还未完全加载出来,以至于事件可能无法正常运行。
只支持冒泡,不支持捕获
同一个类型的事件只能绑定一次
在这里插入图片描述
如上,当希望同一个元素绑定多个同类型事件的时候(上面的这个btn元素绑定2个点击事件),是不被允许的,后绑定的事件会覆盖之前的事件。
删除DOM0级事件处理程序只要将对应事件属性置为null即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d566caa0377449eca8110c08a85a1b9e.png在这里插入图片描述
2.2.标准事件模型
在该事件模型中,一次事件共有三个过程:
事件捕获阶段:事件从document一直向下传播到目标元素,依次检查经过的节点是否绑定了事件监听函数,如果有则执行。
事件处理阶段:事件到达目标元素,触发目标元素的监听函数。
事件冒泡阶段:事件从目标元素冒泡到document,依次检查经过的节点是否绑带了事件监听函数,如果有则执行。

事件绑定监听函数的方式如下:
在这里插入图片描述

事件移除监听函数的方式如下:
在这里插入图片描述
参数如下:
eventType指定事件类型(不要加on)
handler是事件处理函数
useCapture:是一个boolean用于指定是否在捕获阶段进行处理,一般设置为false与IE浏览器保持一致

举例:
在这里插入图片描述
2.2.1特性
可以在一个DOM元素上绑定多个事件处理器,各自并不会冲突
在这里插入图片描述
执行时机:
当第三个参数(useCapture)设置为True就在捕获过程中执行,反之在冒泡过程中执行处理函数
举例:
在这里插入图片描述
设置点击事件
在这里插入图片描述
上述代码使用了enentPhase,返回一个代表当前执行阶段的整数值,1为捕获阶段,2为事件对象触发阶段,3为冒泡阶段
点击Click Me!,输出如下:
在这里插入图片描述
可以看到,p和div都是在冒泡阶段,响应了事件,由于冒泡的特性,裹在里层的p率先做出响应,如果把第三个参数都改为true
在这里插入图片描述
输出如下:
在这里插入图片描述
两者都是在捕获阶段响应事件,所以div比p标签先响应。

2.3.IE事件模型
IE事件模型共有两个过程:
事件处理过程:事件达到目标元素,触发目标元素的监听函数
事件冒泡阶段:事件从目标元素冒泡到document,依次检查经过的节点是否绑定了事件监听函数,如果有则执行
事件绑定监听函数的方式如下:
在这里插入图片描述
事件移除监听函数的方式如下:
在这里插入图片描述
举个例子:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值