Javascript高级编程学习笔记(57)—— 事件(1)事件流

Stella981
• 阅读 536

事件

JS与HTML的交互是通过事件实现的

而事件指的就是:文档或浏览器窗口特定的交互瞬间

可以通过侦听器来预定事件,以便在事件发生时执行相应的代码

这种模式也是设计模式中的观察者模式

事件流

有了事件,也就有了事件流的概念

事件流故名思意:也就是事件的流向,所以事件流描述的是从页面中接收事件的顺序

虽然事件流描述的都是事件的流向,但是事件流在当时的两个最大的浏览器厂商的提出中却是两个差不多完全相反的事件流概念

一是IE的冒泡事件流,二是Netscape的捕获事件流

事件冒泡

即事件开始时由最具体的元素(也就是文档中层次最深的元素)接收,然后逐级向上传播到较为不具体的节点

以下方的HTML代码举例:

<!DOCTYPE html>
<html>
    <head>
        <title> lhy <title>
    <head>
    <body>
        <div id="myDiv"> Click me</div>
    <body>
<html>

如果我们点击div元素

那么这个点击事件将会按照以下顺序传播

  1. document

基本上所有的现代浏览器都支持冒泡事件流,有区别的地方仅仅在于冒泡到什么地方为止

一般来说主流的高级浏览器冒泡都会传递到window才停止

事件捕获

Netscape 团队提出的另一种事件流叫事件捕获

事件捕获的概念与事件冒泡的概念相反:即事件先发生在不太具体的元素,然后向下传递到较为具体的元素

仍以刚才上方的HTML为例,那么事件的触发顺序为:

  1. document

虽然DOM2级事件规范要求事件应该从document开始传播

但是实现了事件捕获的浏览器基本上都是从window开始传播的

需要注意的是,事件捕获老版本浏览器不支持,但是事件冒泡没有这一限制

DOM事件流

“DOM2级事件”规定事件流包括三个阶段:

  1. 事件捕获阶段
  2. 处于目标阶段
  3. 事件冒泡阶段

同样以上方的HTML代码为例,DOM事件流的触发顺序如下:

  1. document
  2. document

上述过程中 13 是事件捕获阶段,4是处于目标阶段,57是事件冒泡阶段

在DOM2级规范中,处于目标阶段应属于冒泡阶段

但实际上在浏览器的实现中在捕获阶段和冒泡阶段都会触发目标元素的事件

所以我们有两个机会在目标对象上操作事件

点赞
收藏
评论区
推荐文章
Dax Dax
3年前
jQuery 的事件绑定和事件委托(事件代理)
简单以jQuery的on()方法为例说明:API:1.on(events,selector,data,handler) 如果on()方法的selector参数为空,事件处理程序就被称为直接绑定。每当在被绑定元素上(如下例中被绑定的document元素,译者注)发生事件时,无论这个事件发生在这个元素上还是从内层元素经冒泡而
Wesley13 Wesley13
3年前
jabdp宝典:新版事件编辑
         低代码开发平台jabdp的页面事件编辑迎来了重大更新,本次更新对事件编辑进行了许多优化。好了废话不多说,就让小编带大伙来了解下新版事件编辑吧!(新版)事件编辑        Jabdp平台的javascript编程是基于事件驱动的,所谓事件驱动,就是指在页面中执行了某种操作所产生的动作,就称为“事件”(Event)。比如
Stella981 Stella981
3年前
ABP EventBus(事件总线)
事件总线就是订阅/发布模式的一种实现  事件总线就是为了降低耦合1.比如在winform中 到处都是事件 !(https://oscimg.oschina.net/oscnet/ed3426bf15550c4b0623956eb95e826780d.png)触发事件的对象 sender事件的数据  e事件的处理逻辑 方法
Stella981 Stella981
3年前
NET Core Web API下事件驱动型架构CQRS架构中聚合与聚合根的实现
NETCoreWebAPI下事件驱动型架构在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅、通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件总线的实现。接下来对于事件驱动型架构的讨论,就需要结合一个实际的架构案例来进行分析。在领域驱动设计的讨论范畴,CQRS架构本身就是事件驱动的,因此,我打算首先介
Wesley13 Wesley13
3年前
JS的事件冒泡和事件捕获
什么是事件?事件是文档和浏览器窗口中发生的特定的交互瞬间。事件是javascript应用跳动的心脏,也是把所有东西黏在一起的胶水,当我们与浏览器中web页面进行某些类型的交互时,事件就发生了。事件可能是用户在某些内容上的点击,鼠标经过某个特定元素或按下键盘上的某些按键,事件还可能是web浏览器中发生的事情,比如说某
Stella981 Stella981
3年前
Android的消息循环与Handler机制理解
一、概念1、事件驱动型什么是事件驱动?就是有事了才去处理,没事就躺着不动。假如把用户点击按钮,滑动页面等这些都看作事件,事件产生后程序就执行相应的处理方法,就是属于事件驱动型。2、消息循环把需要处理的事件表示成一个消息,并且把这个消息放入一个队列。消息循环就是一循环,for或者while都一样。从消息队列里面取出未处理的消息,然后调用该消息的
Easter79 Easter79
3年前
Spring中ApplicationContext的事件机制
   ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理。如果容器中有一个ApplicationListenerBean,每当ApplicationContext发布ApplicationEvent时,
Stella981 Stella981
3年前
OneAlert 入门(一)——事件流
OneAlert入门(一)——事件流OneAlert是国内首个SaaS(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fnews.oneapm.com%2Ftag%2Fsaas%2F)模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有IT
Stella981 Stella981
3年前
JavaScript事件 ——常见事件
1.什么是事件?      当我们与浏览器中Web页面进行某些类型的交互时,事件就发生了。事件可能是用户在某些内容上的点击、鼠标经过某个特定元素或按下键盘上的某些按键。事件还可能是Web浏览器中发生的事情,比如说某个Web页面加载完成,或者是用户滚动窗口或改变窗口大小。常见事件:(http://www.runoo
Stella981 Stella981
3年前
JavaScript——页面相关事件
页面事件是在页面加载或改变浏览器的大小、位置,以及对页面中的滚动条进行操作时,所触发的事件处理程序。加载与卸载事件加载事件(onload)是在网页加载完毕后触发相应的事件处理程序,它可以在网页加载完成后对网页中的表格样式、字体、背景颜色等进行设置。卸载事件(unload)是在卸载网页时触发相应的事件处理程序,卸载网页是指关闭当前页或