本文出自:春哥个人博客:http://www.liyuechun.org
作者:©黎跃春-追时间的人
简介:JavaScript30 是 Wes Bos 推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。目的是帮助人们用纯 JavaScript 来写东西,不借助框架和库,也不使用编译器和引用。现在你看到的是这系列指南的第 25 篇。完整中文版指南及视频教程在 从零到壹全栈部落。

效果图

第25天的训练是学习DOM的事件机制,主要包括事件捕获,事件冒泡,单次执行事件。

源代码

addEventListener参考文档

 <script>let divs = document.querySelectorAll('div');let one = document.querySelector('.one');let two = document.querySelector('.two');let three = document.querySelector('.three');divs.forEach(div => div.addEventListener('click', logText, {once: true,capture: false}));// one.addEventListener('click', logText1, {//     // capture: true// });// two.addEventListener('click', logText2, {//     // capture: true// });// three.addEventListener('click', logText3, {//     capture: true// });function logText(e) {console.log(this.classList.value);// e.stopPropagation();}function logText1(e) {console.log(this.classList.value);// e.stopPropagation();}function logText2(e) {console.log(this.classList.value);// e.stopPropagation();}function logText3(e) {console.log(this.classList.value);e.stopPropagation();}</script>

同时也看一下HTML的文档结构,对于事件机制的理解也很重要:

<div class="one"><div class="two"><div class="three"></div></div>
</div>
  • EventTarget.addEventListener('eventName',callback,option):元素的事件注册方法,接收三个参数,第一个参数为事件的名称(点击click、双击dbclick、改变change等),第二个参数是该事件的回调函数,也称为监听器,第三个参数为事件注册的选项对象,通常会包含两个配置项(是否事件捕获capture以及单次执行once事件,它们两个的默认值都是false)。
  • 当我们点击class="three"div的时候,我们也相当于同时点击了class="two"class="one"
  • e.stopPropagation();是否停止冒泡,如果调用了这个方法,就不会触发父组建的方法。

源码下载

Github Source Code

Day25 - Event Capture, Propagation, Bubbling and Once相关推荐

  1. JS Event Propagation (bubbling and capture)

    事件传播是双向的(bidirectional), 先从DOM树的根元素(window)到事件目标元素(event target), 接着从事件事件目标元素回到DOM树的根元素. 整体可以分为下面三个阶 ...

  2. JS Event handler example - event capture and bubble

    Created by Jerry Wang, last modified on Jun 06, 2015 source link: http://www.ido321.com/1570.html 这个 ...

  3. JavaScript事件处理的例子:事件捕捉和冒泡 - event capture and bubble

    Created by Jerry Wang, last modified on Jun 06, 2015 source link: http://www.ido321.com/1570.html 这个 ...

  4. event.stopPropagation和event.preventDefault有什么区别?

    他们似乎在做同样的事情--是现代的还是老的? 还是不同的浏览器支持它们? 当我自己处理事件(没有框架)时,我总是检查两者并执行(如果存在). (我也return false ,但是我感觉不适用于与no ...

  5. WebKit DOM Event (一)

    DOM Event 规范 DOM Event 主要定义了三类接口: EventTarget, 所有DOM节点和XMLHttpRequest 都实现EventTarget接口 class EventTa ...

  6. Angular 4.x Events Bubbling

    Angular 组件和 DOM 元素通过事件与外部进行通信, Angular 事件绑定语法对于组件和 DOM 元素来说是相同的 - (eventName)="expression" ...

  7. Event.observe

    Event.observe View source on GitHub → Event.observe(element, eventName, handler) → Element element ( ...

  8. 一份来自于全球的前端面试题清单,看看老外喜欢考哪些题(部分有答案)

    方括号中的蓝色标题是题目的出处,有些题目在原址内包含答案.搜集的大部分外国前端面试题没有做翻译,单词并不难,大家应该看得懂.题目旁边的方括号内, 简单记录了与此题相关的知识点.总共大概一千多道,包含国 ...

  9. Cocos Creator游戏开发教程 学习笔记

    学完提问几个问题吧: position的锚点位置数值原点在哪里? 因为position是相对坐标,所以原点是父节点的锚点 .所以Canvas下面的直属节点原点就是世界坐标系的原点Canvas的锚点. ...

最新文章

  1. POJ - 3538 - Domestic Networks
  2. 内核代号101 — 动手写自己的内核
  3. 构建安全的Xml Web Service系列之初探使用Soap头
  4. 安装 | Android studio连接不上真机解决办法(电脑安装虚拟机不成功的情况下)
  5. 别再瞎搞了,处理Java异常的10个最佳实践
  6. Java序列化接口的作用总结
  7. 3、Docker 基础安装和基础使用 二
  8. Jenkins+MSbuild+SVN实现快速搭建.net持续集成环境(构建、编辑、部署到服务器)
  9. 计算判断两条线是否垂直,平行,相交,求相交点坐标
  10. Cisco Packet Tracer 实验
  11. 算法进阶之BFS 算法
  12. 设计模式之访问者模式(Vistor)
  13. HTML+CSS大风车及十字架的实现
  14. 记一次漫长的蓝屏处理过程
  15. 网络工程师学习笔记——RIP路由汇总实验配置精讲
  16. js-禁止微信内置浏览器调整字体大小
  17. 微信小程序给电商行业创业的新曙光
  18. Android 代码新增联系人至手机通讯录中
  19. 智能交通综合管理平台组成
  20. AD9364 测试平台开发——第六篇,SPI配置内容解析

热门文章

  1. H5页面调用手机打电话功能
  2. 大数据全样而非抽样原理_一文带你了解什么是大数据
  3. 信息学奥赛一本通1005:地球人口承载力估计
  4. mysql查看sa密码_sqlserver怎么查看sa密码
  5. socket服务器断开消息,详解JS WebSocket断开原因和心跳机制
  6. 科技云报道:“Sky Computing”会是云计算未来的新方向吗?
  7. python之global关键字
  8. 罗大佑的童年用计算机咋弹,罗大佑《童年》吉他弹奏教学-520吉他网
  9. 四十五、Kafka生产者(Producer)API介绍
  10. linux查看文件打开限制,Linux最大文件打开数使用经验详解