dom-事件模型及冒泡

事件模型

(1). 什么是: 从触发事件开始,到所有相关的事件处理函数都执行完,所经历的过程 (2). 包括: 3个阶段:
在这里插入图片描述

  • a. 捕获阶段:

当触发事件时,浏览器会从顶级元素,到当前触发事件的元素位置,遍历各级父元素上的事件处理函数。——仅遍历,记录,不触发!
为什么? 全球浏览器开发者都一致认为,点在内层元素上,也等效于点在了外层元素上。所以,要记录当前元素各级父元素上绑定的所以事件处理函数。

  • b. 目标触发:

优先触发目标元素上的事件处理函数
目标元素(target): 最初触发事件的这个本来想点击的元素

  • c. 冒泡阶段:

按照捕获阶段记录的父元素上的事件函数的顺序,由内向外反向触发各级父元素上的事件处理函数。

  • 取消冒泡/停止漫延:
    e.stopPropagation();
    在这里插入图片描述
利用冒泡/事件委托/事件代理(delegate)
  • 优化:
    尽量减少事件监听对象的个数
  • 为什么:
    因为浏览器触发事件时是用遍历方式查找到事件监听对象。事件监听对象的多少,决定了遍历的速度,也决定了事件响应的速度。
  • 何时:
    当多个平级子元素要绑定相同的事件时,都必须利用事件委托。
  • 如何:
  • i.只将事件绑定在父元素一份即可!
    结果: 点击任何一个子元素,都会冒泡触发父元素上的事件处理函数.
  • ii.如何获得目标元素:
    错误: 用this!因为事件绑定在父元素上,由父元素触发执行,this->父元素。不再指子元素
    正确: 用e.target代替this!
    e.target: 专门保存目标元素的事件属性。不会随冒泡儿改变!vs this 冒泡到哪一个元素,就指哪个元素。
    iii. 判断目标元素是否想要的。只有目标元素是想要的元素,才执行后续操作。否则什么也不做!
    e. 阻止默认行为:
    • 1). 有些元素在点击后,总是带着浏览器默认的行为:
      比如:
      i. 点击click me,总是自动将#top加到url结尾!
      ii. 点击总是自动提交
    • 2).很多情况下,我们不需要这些默认行为!
    • 3). e.preventDefault() 阻止 默认(行为)
      在这里插入图片描述在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值