0
点赞
收藏
分享

微信扫一扫

必须了解的DOM事件流底层操作流程

事件流是描述从页面中接收事件的顺序,也就是事件发生时会在元素节点之间按照特定的顺序来传播

目录

一.事件流三阶段

二.案例事件——体验事件流


一.事件流三阶段

捕获阶段-->当前目标阶段-->冒泡阶段

这也就是我们执行事件时JS的底层操作,但是JS中只能执行捕获或冒泡其中一个阶段

比如我们使用传统方式进行事件捕获:

element.onclick = function(){}
//只能捕获到冒泡阶段

或者使用attachEvent来捕获事件:

element.attachEvent('onclick',function(){})
//只能捕获到冒泡阶段

再者就是使用addEvenetListener来捕获事件:

element.addEventListener('click',function(){},true/false)

当第三个参数为true时,表示在事件捕获阶段调用事件处理程序

当第三个参数为false时,表示在事件冒泡阶段调用事件处理程序(默认值)

这就是我们使用addEventListener的原因,它不仅方便实用可多次在同一元素同一事件中执行多次程序,还可以自定义捕获阶段

当然,在实际的开发中很少用到事件捕获 ,主要使用冒泡(onblur、onfocus,onmouseleave等等这些事件是没有冒泡的,需要我们在开发时注意)


二.案例事件——体验事件流

当我们有一个大盒子包着一个小盒子,给大盒子,小盒子以及文档都注册了点击事件,那么当我们点击了小盒子,如果第三个参数为false(冒泡),那么会返回怎么样的顺序

<!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>
    <style>
        header{
            width: 300px;
            height: 300px;
            background-color: aquamarine;
        }
        div{
            width: 150px;
            height: 150px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <header>
        <div></div>
    </header>
        
    
</body>
<script>
  const div = document.querySelector('div')
  const header = document.querySelector('header')
  div.addEventListener('click',()=>{
      console.log('1')
  },false)
  header.addEventListener('click',()=>{
      console.log('2')
  },false)
  document.addEventListener('click',()=>{
      console.log('document')
  },false)

        
</script>

</html>

 如果第三个参数为true(捕获),那么会返回怎么样的顺序

<!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>
    <style>
        header{
            width: 300px;
            height: 300px;
            background-color: aquamarine;
        }
        div{
            width: 150px;
            height: 150px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <header>
        <div></div>
    </header>
        
    
</body>
<script>
  const div = document.querySelector('div')
  const header = document.querySelector('header')
  div.addEventListener('click',()=>{
      console.log('1')
  },true)
  header.addEventListener('click',()=>{
      console.log('2')
  },true)
  document.addEventListener('click',()=>{
      console.log('document')
  },true)

        
</script>

</html>

举报

相关推荐

0 条评论