js事件流

概念

由来: 由于微软和网景乱搞,后来必须要为事件传播机制,制定一个标准,因为事件捕获是网景公司开发出来的,而事件冒泡是由微软公司开发出来的,它们都想要自己的技术成为标准,所以导致这两个公司老是干架,制定标准的人为了不让它们干架,所以研发了事件流

事件概念

  • 事件是文档或者浏览器窗口中发生的,特定的交互瞬间
  • 事件是用户或浏览器自身执行的某种动作,如click,loadmouseover都是事件的名字
  • 事件是javaScriptDOM之间交互的桥梁
  • 你若触发,我便执行——事件发生,调用它的处理函数执行相应的JavaScript代码给出响应
    例子:click事件

事件流

具体解释
当一个节点产生一个事件时,该事件会在元素结点与根节点之间按特定的顺序传播,路径所经过的节点都会收到该事件,这个传播过程称为DOM事件流。
简记
事件流描述的是从页面中接收事件的顺序

事件流

事件流的两种模型

冒泡型事件流(由下而上)

事件的传播是从最特定的事件目标到最不特定的事件目标。即从DOM树的叶子到根。
例子·:
在这里插入图片描述

捕获型事件流(由上而下)

事件的传播是从最不特定的事件目标到最特定的事件目标。即从DOM树的根到叶子。
例子·:在这里插入图片描述

DOM事件流(两种都会发生)

DOM标准采用捕获+冒泡。两种事件流都会触发DOM的所有对象,从document对象开始,也在document对象结束。
例子·:
在这里插入图片描述
DOM标准规定事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。

  • 事件捕获阶段:实际目标<div>)在捕获阶段不会接收事件。也就是在捕获阶段,事件从document<html>再到<body>就停止了。
  • 处于目标阶段:事件在<div>上发生并处理。但是事件处理会被看成是冒泡阶段的一部分
  • 冒泡阶段:事件又传播回文档。
    例子1:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    p{
        background-color: aquamarine;
        height: 50px;
        width:300px;
        font-size: 50px;
    }
    div{
        background-color: rgb(133, 134, 134);
        height: 500px;
        width: 300px;
        margin: auto;
    }
</style>
<body>
    <div>
        <p>hh</p>
    </div>
</body>
<script>
    var p=document.querySelector('p');
    var div=document.querySelector('div');
    //默认冒泡阶段,从下往上
    p.onclick=function (){
        console.dir('p')
    }
    div.onclick=function (){
        console.dir('div')
    }
// </script>
</html>

效果如下
在这里插入图片描述
例子2:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    p{
        background-color: aquamarine;
        height: 50px;
        width:300px;
        font-size: 50px;
    }
    div{
        background-color: rgb(133, 134, 134);
        height: 500px;
        width: 300px;
        margin: auto;
    }
</style>
<body>
    <div>
        <p>hh</p>
    </div>
</body>
<script>
    var p=document.querySelector('p');
    var div=document.querySelector('div');
    //true是捕获阶段 false 是冒泡阶段
    p.addEventListener('click',function(){
        console.dir('p')
    },true)
    div.addEventListener('click',function(){
        console.dir('div')
    },true)
// </script>
</html>

效果如下
在这里插入图片描述
例子3:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    p{
        background-color: aquamarine;
        height: 50px;
        width:300px;
        font-size: 50px;
    }
    div{
        background-color: rgb(133, 134, 134);
        height: 500px;
        width: 300px;
        margin: auto;
    }
</style>
<body>
    <div>
        <p>hh</p>
    </div>
</body>
<script>
    var p=document.querySelector('p');
    var div=document.querySelector('div');
    //true是捕获阶段 false 是冒泡阶段
    p.addEventListener('click',function(){
        console.dir('p')
    },false)
    div.addEventListener('click',function(){
        console.dir('div')
    },true)
    document.body.addEventListener('click',function(){
        console.dir('body')
    },false)
</script>
</html>

效果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值