javascript核心技术(二十六)事件的传播原理 冒泡事件与捕获事件

[复制链接]
查看: 1600|回复: 31
发表于 2023-1-25 12:19:45 | 显示全部楼层 | 阅读模式
首先我们说一下冒泡事件和捕获事件分别是什么意思。
冒泡事件:即事件从内向外的执行的过程,如同水面上冒泡一样,从中间冒出,然后逐渐向四周消散。
捕获事件:即事件从外向内的执行过程,如同收网捕捞一样,逐渐把网收回来。

事件的默认绑定都是冒泡事件,例如前面我们所讲的,如果给父元素和子元素同时绑定了点击事件,当点击子元素时,是先执行子元素绑定的事件呢还是先执行父元素绑定的事件呢?
答案是:先执行子元素的,因为默认的事件绑定都是冒泡事件。
下面我们用一个例子来说明,请看以下代码:
一、冒泡事件
<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <title>事件传播-冒泡事件</title>
        <style type="text/css">
                div{padding: 50px}
        </style>
</head>
<body>
<div id="div1" style="width:400px;height:400px;background-color:gray;">
    div1
        <div id="div2" style="width:300px;height:300px;background-color:green;">
        div2
                <div id="div3" style="width:150px;height:150px;background-color:rgb(165, 78, 78);">div3</div>
        </div>
</div>
<script type="text/javascript">
        //冒泡事件 (在冒泡阶段执行的事件,从内向外依次执行)
        document.getElementById('div1').onclick = function(){
                console.log('点了div1');
        }
        document.getElementById('div2').onclick = function(){
                console.log('点了div2');
        }
        document.getElementById('div3').onclick = function(){
                console.log('点了div3');
        }
</script>
</body>
</html>

javascript核心技术(二十六)事件的传播原理 冒泡事件与捕获事件

在以上案例中,我们分别给div1、div2和div3绑定了点击事件,当我们点击div3时,点击事件触发的先后顺序为div3-div2-div1,即冒泡过程。
执行结果如下:
javascript核心技术(二十六)事件的传播原理 冒泡事件与捕获事件

那么,大家可能会有疑问,能否改变事件触发的先后顺序呢,当然是可以的。
下面我们就来看捕获事件,它与冒泡的顺序正好相反。
请看以下代码:
二、捕获事件
<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <title>事件传播-捕获事件</title>
        <style type="text/css">
                div{padding: 50px}
        </style>
</head>
<body>
<div id="div1" style="width:400px;height:400px;background-color:gray;">
    div1
        <div id="div2" style="width:300px;height:300px;background-color:green;">
        div2
                <div id="div3" style="width:150px;height:150px;background-color:rgb(165, 78, 78);">div3</div>
        </div>
</div>
<script type="text/javascript">
        //捕获事件(在捕获阶段执行的事件,从外向内依次执行)
        //只能以事件监听的方式才能做到  第三个参数设置为true
        document.getElementById('div1').addEventListener('click', function(){
                console.log('div1');
        }, true);
        document.getElementById('div2').addEventListener('click', function(){
                console.log('div2');
        }, true);
        document.getElementById('div3').addEventListener('click', function(){
                console.log('div3');
        }, true);
</script>
</body>
</html>

在上面的代码中,我们同样给div1、div2和div3绑定了点击事件,可是,当我们点击div3时,发现先触发了div1的事件,再触发div2,最后是div3。这就是捕获的过程,从外向内执行。
想要实现事件捕获,必须要使用addEventListener进行事件监听方式绑定,并将第三个参数设置为true。
执行结果如下:
javascript核心技术(二十六)事件的传播原理 冒泡事件与捕获事件

ok,以上就是关于冒泡事件与捕获事件的详细讲解,请大家务必掌握。
易博软件介绍

0

主题

15

帖子

8

积分

营销入门

Rank: 2

积分
8
发表于 2023-2-17 00:06:39 | 显示全部楼层
让暴风雨来的更猛烈些!努力!

0

主题

15

帖子

8

积分

营销入门

Rank: 2

积分
8
发表于 2023-3-3 01:06:49 | 显示全部楼层
写的很不错!

0

主题

12

帖子

7

积分

营销入门

Rank: 2

积分
7
发表于 2023-3-13 03:35:39 | 显示全部楼层
谢谢你给了我一个好的起点

0

主题

21

帖子

11

积分

营销入门

Rank: 2

积分
11
发表于 2023-3-23 05:12:01 | 显示全部楼层
你写出了所有编程序人的心声  不错!

0

主题

15

帖子

8

积分

营销入门

Rank: 2

积分
8
发表于 2023-3-28 08:04:55 | 显示全部楼层
俺和你们说哟,我还没毕业出来的,。其实计算机这方面我很菜,我自己都这样认为,但是尽管这样我还是能在苏州这边的IT里面工作,我感情很幸福,有时候幸福降临的时候挡也挡不住,真的我很喜欢现在这样,因为我比老哥幸运的多了,。111

0

主题

30

帖子

16

积分

营销入门

Rank: 2

积分
16
发表于 2023-4-3 00:16:59 | 显示全部楼层
真的不错,佩服佩服!   

0

主题

24

帖子

13

积分

营销入门

Rank: 2

积分
13
发表于 2023-4-8 07:34:04 | 显示全部楼层
  楼主的一篇文章让我深受到编程不是那么简单,而是要人理化!  高见,这也就是学无止尽吧,能干其实很简单,真正能干得好,干出名堂来却是相当不容易的。要不然为何中国就出不了闻名于世的软件呢?
发表于 2023-4-13 10:29:00 | 显示全部楼层
看了你写的东西,心里有些感触,谢了

0

主题

9

帖子

5

积分

营销入门

Rank: 2

积分
5
发表于 2023-4-18 01:32:56 | 显示全部楼层
看到这些还真是有点兴奋啊。。我想快点学。。可是不知道哪有得教啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|Archiver|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表