《长安的荔枝·事件流版》——一颗荔枝引发的“冒泡惨案”

近期,随着电视剧《长安的荔枝》大火,本篇就让我们以《长安的荔枝》为模板,详细讲解事件流、事件捕获、事件冒泡及阻止冒泡。

事件流事件完整执行过程中的流动路径

1.捕获阶段------"从长安到八百里加急直奔岭南采摘荔枝"'

当杨贵妃在长安突然想吃荔枝了,唐玄宗即刻下令朝廷八百里加急"捕获"荔枝。

  • 皇帝唐玄宗下令(Document)下令 ->
  • 宰相杨国忠(Element html)批红 ->
  • 刺史何履光(Element body)点兵 ->
  • 荔枝使李善德(Element div)采摘 ->

2.冒泡阶段------"荔枝传回长安"

  • 荔枝使李善德(Element div)采摘完毕,荔枝已装箱->

  • 刺史何履光(Element body)岭南道损耗+1,明年预算再砍三成->

  • 宰相杨国忠(Element html)上奏:"陛下,路途遥远,荔枝可能坏了->

  • 皇上唐玄宗(Document)大怒:一群饭桶!!

  • 捕获阶段便是自上而下,从父到子。
  • 冒泡阶段则是从下到上,从子到父。

事件捕获

目标:简单了解事件捕获执行过程----->唐玄宗下令采摘荔枝,官员层层准备直达岭南

  • 事件捕获概念: 从DOM的根元素开始去执行对应的事件(从外到里)

  • 事件捕获需要写对应的代码才能看到效果

  • 代码:

    DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)

    javascript 复制代码
               document,addEventListener('click',function(e){
                  alert('点击事件')
               }) 
  • 说明:

    1. addEventListener第三个参数传入true代表是捕获阶段

    2. 若传入false代表冒泡阶段触发,默认就是false

    3. 若是用L0事件监听,则只有冒泡阶段,没有捕获

      xml 复制代码
         <!DOCTYPE html>
         <html lang="en">
         <head>
             <meta charset="UTF-8">
             <meta name="viewport" content="width=device-width, initial-scale=1.0">
             <title>Document</title>
         <style>
             .father{
                 width: 200px;
                 height: 200px;
                 background-color:green;
             }
             .son{
                 width: 100px;
                 height: 100px;
                 background-color: red;
             }
         </style>
         </head>
         <body>
             <div class="father">
                 <div class="son">
      
                 </div>
             </div>
             <script>
                 const fa=document.querySelectorAll('.father')
                 const son=document.querySelectorAll('.son')
         document,addEventListener('click',function(e){
            alert('我是爷爷')
         }) // false 即为冒泡,默认为false
         fa.document,addEventListener('click',function(e){
            alert('我是爸爸')
         })
         son.document,addEventListener('click',function(e){
            alert('我是儿子')
         })
      
             </script>
         </body>
         </html>

事件冒泡

目标:能够说出事件冒泡的执行过程-->李善德将荔枝采回往上运往长安

事件冒泡概念: 当一个元素被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发。这一工程被称为事件冒泡

  • 简单理解:当一个元素触发事件后,会依次向上调用所有父级元素的同名事件
  • 事件冒泡是默认存在的
  • L2事件监听第三个参数是false,或者默认都是冒泡

阻止冒泡

  • 目标:能够阻止冒泡的代码-->将已经坏了的荔枝及时扔出
  • 需求:若想把事件就限制在当前元素内,就要阻止事件冒泡
  • 前提:阻止事件冒泡需要拿到事件对象
  • 语法: 事件对象.stopPropagation // Propagation 传播
  • 注意:此方法可以阻断事件流动传播,不光在冒泡阶段有效,捕获阶段也有效
相关推荐
yantuguiguziPGJ4 分钟前
WPF 联合 Web 开发调试流程梳理(基于 Microsoft.Web.WebView2)
前端·microsoft·wpf
大飞记Python37 分钟前
部门管理|“编辑部门”功能实现(Django5零基础Web平台)
前端·数据库·python·django
tsumikistep2 小时前
【前端】前端运行环境的结构
前端
你的人类朋友2 小时前
【Node】认识multer库
前端·javascript·后端
Aitter2 小时前
PDF和Word文件转换为Markdown的技术实现
前端·ai编程
mapbar_front2 小时前
面试问题—上家公司的离职原因
前端·面试
昔人'3 小时前
css使用 :where() 来简化大型 CSS 选择器列表
前端·css
昔人'3 小时前
css `dorp-shadow`
前端·css
流***陌3 小时前
扭蛋机 Roll 福利房小程序前端功能设计:融合趣味互动与福利适配
前端·小程序
可触的未来,发芽的智生3 小时前
新奇特:黑猫警长的纳米世界,忆阻器与神经网络的智慧
javascript·人工智能·python·神经网络·架构