重学前端 37 # 浏览器事件

简介: 重学前端 37 # 浏览器事件

一、介绍


这一篇主要学习一下浏览器部分的事件。




二、事件概述


2.1、pointer 设备

所谓 pointer 设备,是指它的输入最终会被抽象成屏幕上面的一个点。比如触摸屏和鼠标。


2.2、WIMP 系统

现代的 UI 系统,都源自 WIMP 系统。WIMP 即 Window Icon Menu Pointer 四个要素,它最初由施乐公司研发,后来被微软和苹果两家公司应用在了自己的操作系统上。




三、捕获与冒泡


3.1、简述

   实际上鼠标点击时并没有位置信息,但是一般操作系统会根据位移的累积计算出来,跟触摸屏一样,提供一个坐标给浏览器。把这个坐标转换为具体的元素上事件的过程,就是捕获过程。而冒泡过程,则是符合人类理解逻辑的:比如你摸了我的手时,你也摸了我到了我这个人。可以认为,捕获是计算机处理事件的逻辑,而冒泡是人类处理事件的逻辑。


3.2、事件传播顺序

在一个事件发生时,捕获过程跟冒泡过程总是先后发生,跟你是否监听毫无关联。

<body>
  <input id="i"/>
</body>


document.body.addEventListener("click", () => {
    console.log(1)
}, true)
document.getElementById("i").addEventListener("click", () => {
    console.log(2)
}, true)
document.body.addEventListener("click", () => {
    console.log(3)
}, false)
document.getElementById("i").addEventListener("click", () => {
    console.log(4)
}, false)
// 输出顺序
1 2 4 3


3.3、监听事件 API

addEventListener 有三个参数:事件名称、事件处理函数、捕获还是冒泡。


1、事件处理函数不一定是函数

// 具有 handleEvent 方法的对象
var o = {
  handleEvent: event => console.log(event)
}
document.body.addEventListener("keydown", o, false);

2、第三个值可以是个对象,它提供了更多选项

  • once:只执行一次。
  • passive:承诺此事件监听不会调用 preventDefault,这有助于性能。
  • useCapture:是否捕获(否则冒泡)。




四、焦点


4.1、键盘事件

键盘事件是由焦点系统控制的,一般来说,操作系统也会提供一套焦点系统,但是现代浏览器一般都选择在自己的系统内覆盖原本的焦点系统。


1、焦点系统认为整个 UI 系统中,有且仅有一个“聚焦”的元素,所有的键盘事件的目标元素都是这个聚焦元素。

2、Tab 键被用来切换到下一个可聚焦的元素,焦点系统占用了 Tab 键,但是可以用 JavaScript 来阻止这个行为。

3、浏览器 API 还提供了 API 来操作焦点,如:


document.body.focus();
document.body.blur();



五、自定义事件


参考MDN文档

Events 可以使用 Event 构造函数创建如下:

var event = new Event('build');
// Listen for the event.
elem.addEventListener('build', function (e) { ... }, false);
// Dispatch the event.
elem.dispatchEvent(event);



目录
相关文章
|
1月前
|
前端开发
调试前端时,在浏览器上修改参数并重新调用接口
有时候我们的页面点击过了,但是接口出问题,想修改参数再调用一次,一般是用apiPost工具把接口复制,再加上token和参数,但是这样非常的效率比较低。
42 0
|
2月前
|
JavaScript 开发者
什么是浏览器环境下事件的 Propagation
什么是浏览器环境下事件的 Propagation
49 1
|
5月前
|
前端开发
前端页面调试小技巧(谷歌浏览器)
前端页面调试小技巧(谷歌浏览器)
38 0
|
3月前
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
156 0
|
14天前
|
监控 前端开发 JavaScript
如何使用浏览器调试前端代码?
【4月更文挑战第11天】前端开发中,浏览器调试是关键技能,能提升代码质量。本文介绍了如何使用浏览器的调试工具:1) 打开调试窗口(F12或右键检查);2) Elements标签页检查DOM结构和样式;3) Console调试JavaScript,查看日志和错误信息;4) Sources设置断点调试JS文件;5) 利用Network、Performance和Memory等标签页优化性能。熟悉调试工具、利用日志和错误信息能有效定位问题,提高开发效率。
38 7
|
1月前
|
前端开发 JavaScript 程序员
推荐给前端程序员的5款浏览器插件
推荐给前端程序员的5款浏览器插件
|
1月前
|
SQL 存储 JavaScript
前端浏览器调试详解版
前端浏览器调试详解版
55 0
|
1月前
|
JavaScript 前端开发
js阻止浏览器默认事件和防止事件传播事件
js阻止浏览器默认事件和防止事件传播事件
21 3
|
2月前
|
消息中间件 JavaScript 前端开发
前端秘法进阶篇----这还是我们熟悉的浏览器吗?(浏览器的渲染原理)
前端秘法进阶篇----这还是我们熟悉的浏览器吗?(浏览器的渲染原理)
|
2月前
|
缓存 前端开发 JavaScript
在浏览器的舞台上演:前端如何挑战页面刷新的极限
在浏览器的舞台上演:前端如何挑战页面刷新的极限
58 0