JavaScript基础(六)之web APIs

第二部分:Web APIs

目录

第二部分:Web APIs

四、DOM-事件进阶

4.1 事件流

4.1.1 事件流与两个阶段说明

4.1.2 事件捕获

4.1.3 事件冒泡

4.1.4 阻止冒泡

4.1.5 解绑事件

鼠标经过事件的区别

两种注册事件的区别

4.2 事件委托

4.3 其他事件

4.3.1 页面加载事件

4.3.2 元素滚动事件

页面滚动事件-获取位置

关于document.documentElement

页面滚动事件-滚动到指定的坐标

4.3.3 页面尺寸事件

页面尺寸事件-获取元素宽高

4.4 元素尺寸与位置

元素尺寸与位置-尺寸

获取宽高

获取位置

获取位置

4.5 综合案例

案例-仿京东固定导航栏案例

案例-实现bilibili点击小滑块移动效果

案例-电梯导航

四、DOM-事件进阶

4.1 事件流

4.1.1 事件流与两个阶段说明

目标:能够说出事件流经过的2个阶段

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


 

  • 说明:假设页面里有个div,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段
  • 简单来说:捕获阶段是从父到子冒泡阶段是从子到父
  • 实际工作都是使用事件冒泡为主
     

4.1.2 事件捕获

目标:简单了解事件捕获执行过程

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

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

代码:


 

说明:

  • addEventListener第三个参数传入true代表是捕获阶段触发(很少使用)
  • 若传入false代表冒泡阶段触发,默认就是false 
  • 若是用L0事件监听,则只有冒泡阶段,没有捕获
     
<!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>
    .father {
      width: 500px;
      height: 500px;
      background-color: pink;
    }

    .son {
      width: 200px;
      height: 200px;
      background-color: purple;
    }
  </style>
</head>

<body>
  <div class="father">
    <div class="son"></div>
  </div>
  <script>
    const fa = document.querySelector('.father')
    const son = document.querySelector('.son')
    // 山东  济南  蓝翔   目标  捕获阶段
    // 蓝翔  济南  山东         冒泡阶段
    document.addEventListener('click', function () {
      alert('我是爷爷')
    }, true)
    fa.addEventListener('click', function () {
      alert('我是爸爸')
    }, true)
    son.addEventListener('click', function () {
      alert('我是儿子')
    }, true)

  </script>
</body>

</html>

4.1.3 事件冒泡

目标:能够说出事件冒泡的执行过程

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

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

4.1.4 阻止冒泡

目标:能够写出阻止冒泡的代码

问题:因为默认就有冒泡模式的存在,所以容易导致事件影响到父级元素

需求:若想把事件就限制在当前元素内,就需要阻止事件冒泡

前提:阻止事件冒泡需要拿到事件对象

语法


 

注意:此方法可以阻断事件流动传播,不光在冒泡阶段有效,捕获阶段也有效


 

我们某些情况下需要阻止默认行为的发生,比如阻止链接的跳转,表单域跳转

语法


 

总结:

1. 阻止冒泡如何做?


 

2. 阻止元素默认行为如何做?


 

4.1.5 解绑事件

on事件方式,直接使用null覆盖偶就可以实现事件的解绑

语法


 

addEventListener方式,必须使用:

removeEventListener(事件类型,事件处理函数, [获取捕获或者冒泡阶段])

例如:


 

注意:匿名函数无法被解绑
 

鼠标经过事件的区别

鼠标经过事件:

  • mouseover和mouseout 会有冒泡效果
  • mouseenter和mouseleave 没有 冒泡效果(推荐)
     

两种注册事件的区别

传统on注册(L0):

  • 同一个对象,后面注册的事件会覆盖前面注册(同一个事件)
  • 直接使用 null 覆盖偶就可以实现事件的解绑
  • 都是冒泡阶段执行的

事件监听注册(L2):

  • 语法:addEventListener(事件类型,事件处理函数,是否使用捕获)
  • 后面注册的事件不会覆盖前面注册的事件(同一个事件)
  • 可以通过第三个参数去确定是在冒泡或者捕获阶段执行
  • 必须使用 removeEventListener(事件类型,事件处理函数,获取捕获或者冒泡阶段)
  • 匿名函数无法被解绑
     

4.2 事件委托

目标:能够说出事件委托的好处

委托:


 

思考:

1. 如果同时给多个元素注册事件,我们怎么做的?

  • for循环注册事件

2. 有没有一种技巧注册一次事件就能完成以.上效果呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值