浏览器事件:为什么会有捕获过程和冒泡过程?
浏览器事件
事件概述
一般个人设备的输入有:
- 键盘
- 鼠标
- 触摸屏
这其中,触摸屏和鼠标又有一定的共性,它们被称作pointer设备,所谓pointer设备,是指它的输入最终会被抽象成屏幕上面的一个点。 现代的UI系统,都源自WIMP系统。WIMP即Window Icon Menu Pointer四个要素,它最初由施乐公司研发,后来被微软和苹果两家公司应用在了自己的操作系统上
捕获与冒泡
捕获过程是从外向内,冒泡过程是从内向外。实际上点击事件来自触摸屏或者鼠标,鼠标点击并没有位置信息,但是一般操作系统会根据位移的累积计算出来,跟触摸屏一样,提供一个坐标给浏览器。那么,把这个坐标转换为具体的元素上事件的过程,就是捕获过程了。而冒泡过程,则是符合人类理解逻辑的:当你按电视机开关时,你也按到了电视机。 捕获是计算机处理事件的逻辑,而冒泡是人类处理事件的逻辑。 在我们实际监听事件时,我建议这样使用冒泡和捕获机制:默认使用冒泡模式,当开发组件时,遇到需要父元素控制子元素的行为,可以使用捕获机制。 addEventListener有三个参数:
- 事件名称
- 事件处理函数
- 捕获还是冒泡
第三个参数不一定是bool值,也可以是个对象,它提供了更多选项。
- once:只执行一次。
- passive:承诺此事件监听不会调用preventDefault,这有助于性能。
- useCapture:是否捕获(否则冒泡)。
实际使用,在现代浏览器中,还可以不传第三个参数
焦点
焦点系统认为整个UI系统中,有且仅有一个“聚焦”的元素,所有的键盘事件的目标元素都是这个聚焦元素。 浏览器API还提供了API来操作焦点
document.body.focus();document.body.blur();
其实原本键盘事件不需要捕获过程,但是为了跟pointer设备保持一致,也规定了从外向内传播的捕获过程。
自定义事件
实际上事件也是一种非常好的代码架构,但是DOM API中的事件并不能用于普通对象,所以很遗憾,我们只能在DOM元素上使用自定义事件。
var evt = new Event("look", {"bubbles":true, "cancelable":false});
document.dispatchEvent(evt);
这里使用Event构造器来创造了一个新的事件,然后调用dispatchEvent来在特定元素上触发。 我们可以给这个Event添加自定义属性、方法。
浏览器事件:为什么会有捕获过程和冒泡过程?相关推荐
- 浏览器事件捕获冒泡以及阻止冒泡
浏览器事件捕获冒泡以及阻止冒泡 一.浏览器的dom事件流 dom事件流有三个阶段,捕获阶段->目标阶段->冒泡阶段,不管是有没有绑定事件,只要发生点击事件,事件的处理将从DOM层次的根开始 ...
- 浏览器事件循环机制与Vue nextTick的实现
浏览器事件循环机制 先上一段简单的代码 console.log('aa'); setTimeout(() => { console.log('bb')}, 0); Promise.resolve ...
- 浏览器事件代理机制原理?
关于浏览器事件代理 弄明白浏览器事件代理事前,先了解下事件.事件流. 一,事件 HTML DOM 允许 JavaScript 对 HTML 事件作出反应.即操作对应HTML元素时,会触发相应事件(包含 ...
- [JS] 事件冒泡,阻止事件冒泡,事件的三个阶段(捕获,目标,冒泡)
事件冒泡 添加三个套在一起的div元素,在最里面放一个button,感受事件触发时从里到外"冒泡"的过程. 给每个div都加一个事件:点击时就alert test.html < ...
- 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解
<javascript高级程序设计>跨浏览器事件处理程序EventUtil.js个人注释 EventUtil.js // 跨浏览器事件处理程序封装 var EventUtil = {// ...
- 5调用外部浏览器打开代码_浏览器事件循环
浏览器运行过程中会同时面对多种任务,用户交互事件(鼠标.键盘).网络请求.页面渲染等.而这些任务不能是无序的,必须有个先来后到,浏览器内部需要一套预定的逻辑来有序处理这些任务,因此浏览器事件循环诞生了 ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- 浏览器事件模型与jquery事件
首先看一下浏览器事件模型: 可见,浏览器在解析时候,要过两遍HTML,一次是从上而下,称为事件捕获:一次从下而上,称为事件冒泡(关于事件冒泡和事件捕获,这里就不详细说了). 停止冒泡的方式:e.sto ...
- JS之事件处理(一)--事件概述、非IE浏览器/IE浏览器中的事件绑定、解决浏览器事件绑定兼容性问题
一.概述 描述:事件本质是一种交互操作,事件通常与函数配合使用,当事件发生时函数才会执行 事件是由三部分组成的:事件源 事件类型 事件处理程序 事件源:事件被触发的对象–谁 事件类型:如何触发 什么事 ...
- [js] 在DOM上同时绑定两个点击事件(一个用捕获,一个用冒泡),事件总共会执行几次,先执行哪个事件?
[js] 在DOM上同时绑定两个点击事件(一个用捕获,一个用冒泡),事件总共会执行几次,先执行哪个事件? 两次 先捕获,后冒泡 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一 ...
最新文章
- 从时间管理聊到技术人如何保持竞争力?
- if you have something important on the clean my mac
- 【Spring-AOP-1】AOP相关概念
- raise errorclass(errno, errval) sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1366, u
- 浏览器与硬件交互的方法_【第2058期】现代浏览器内部揭秘之一
- c# winform 应用编程代码总结 15
- 大数据平台有什么功能作用
- PHP连接MongoDB
- 2014北京邀请赛 F Football on Table
- 数据之路 - Python爬虫 - Json模块与JsonPath
- ffmpeg编码:xavc 42210bit+mxf
- pip更新不成功/Python虚拟环境下如何更新pip(Pycharm)
- 好用的在线PS编辑器
- linux防火墙开放端口无法打开,LInux 开启防火墙网站无法访问问题
- 骁龙835(MSM8998)芯片数据参考
- vue-seamless-scroll 从入坑到放弃
- GeoServer学习(初学WMS、WCS、WFS、WMTS)
- Linux网络编程——网络协议入门
- 身高和java 车架,自行车车架与身高尺寸(图文)
- 不知道O2O产品的APP该如何运营推广?
热门文章
- Kruskal算法 数据结构 浙江大学 陈越、何钦铭
- 小众软件android,应用专题 - 这些小众软件,满足你文艺不甘寂寞的心|微信安卓版7.0内测来啦 - Android 应用 - 生活 - 【最美应用】...
- 英语四级考试在即,这几个超有用的App赶紧用起来,顺利考过四级
- 计算机的存储容量1kb表示什么,计算机的存储容量常用KB为单位,这里1KB表示什么?...
- linux下删除系统软件,Linux系统 安装垃圾清除软件,linux清理工具安装教程
- CVE-2017-11176: A step-by-step Linux Kernel exploitation (part 3/4)
- python微信刷票代码_微信刷票漏洞详解,Python脚本实现一秒破万!
- arcgis server发布自定义打印模板及利用ArcGIS API javascript使用自定义打印服务打印地图
- 中西方对时间的差异_中西文化的差异-2 时间观
- Keystone认证服务详细操作流程