事件冒泡和事件捕获的含义? — 第13.1讲

该懂得一定要懂,该学的不能再拖,该行动的就是此刻!

一:事件流的历史?

  就像是在桌面上画了许多同心圆,当把手放在圆心上,那么你的手指指的不是一个圆,而是所有的圆。公司的浏览器开发团队在看待浏览器事件方面还是一致的,如果你单击了某个按钮,他们都认为,事件不仅仅发生在按钮上,甚至单击了整个页面。
   JavaScript中事件流描述的是从页面中接收事件的顺序,但是有意思的是,IE和Netscape开发团队居然提出了差不多是完全相反的事件流的概念。IE的事件流是事件冒泡,而Netscape Communicator的事件流是事件捕获流

二:什么是事件冒泡?

事件冒泡:事件开始时从最具体的元素接收,然后逐级向上传播到到较为不具体的节点。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="myDiv">点击俺们</div>
</body>
</html>

如果你点击了上面的元素,那么这个click事件会按照如下顺序传播:

1:<div>
2:<body>
3:<html>
4:document

所有的浏览器都支持冒泡,但是具体还有差别,IE5以及更早的版本中的事件冒泡会跳过<html>元素(即从<body>直接跳到document),但是IE9、Firefox、Chrome和Safari将事件一直冒泡到window对象。流程图如下所示:
冒泡事件流程图

三:什么是事件捕获?

  事件捕获:和事件冒泡相反,不太具体地节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于在时间到达预定目标之前捕获它。如果仍以前面的html页面作为演示事件捕获的例子,那么单击<div>元素就会以下列顺序触发click事件。

1:document<div>
2:<html>
3:<body>
4:<div>

捕获事件流程图

四:到底用哪个啊?

  虽然事件捕获是Netscape Communicator唯一支持的事件流模型,但是,IE9、Firefox、Chrome和Safari将都支持这种事件模型,。尽管“DOM2级事件”(下一篇博客专门讲述DOM0级和DOM2级事件处理程序)要求事件应该从document对象开始执行,但是以上的浏览器都是从window对象开始捕获事件的。
因此我们通常用事件冒泡,很少有人使用事件捕获模型。

五:什么是DOM事件流?

  “DOM2级事件”,规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。首先是事件捕获阶段;然后是实际的目标接收到事件。最后一个阶段是冒泡阶段,可以在这个阶段对事件作出相应。详细如下图所示:
这里写图片描述
在DOM事件流中,在捕获阶段,事件东document到html到body后就停止了,下一个阶段就是出于目标阶段,于是,事件在div上就开始激活,并在事件处理中被看成冒泡阶段的一部分;然后才发生冒泡阶段,事件又被传回文档。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值