美文网首页
浏览器事件机制

浏览器事件机制

作者: anshi | 来源:发表于2018-05-04 17:25 被阅读0次

本意是讲 react 事件机制的,但仔细想想..我连浏览器本身的事件机制也不是十分清晰

事件传播

事件传播的三个阶段:捕获,目标对象,冒泡。

image.png

1.其中捕获(Capture)是 事件对象(event object) 从 window 派发到 目标对象父级的过程。
2.目标(Target)阶段是 事件对象派发到目标元素时的阶段,如果事件类型指示其不冒泡,那事件传播将在此阶段终止。
3.冒泡(Bubbling)阶段 和捕获相反,是以目标对象父级到 window 的过程。
在任一阶段调用 stopPropagation 都将终止本次事件的传播。

  window.addEventListener('click',function (event) {
    console.log(event)
  },true)

note: addEventListener形式注册的监听事件接受参数以指定是否在捕获阶段触发本次事件,默认值为否(既冒泡阶段)。以事件处理器注册的事件在非捕获阶段触发。

点击视窗的内任一元素,输出 MouseEvent 对象。查看对象的 path 属性,既该对象的传播路径。

image.png

阻止冒泡和默认事件

  • 调用 stopPropagation 严格来说不是阻止冒泡,是阻止事件传播,捕获阶段也可以直接阻止。

    image.png
  • 事件接口还有一个 cancelBubble 因历史原因的 stopPropagation 的别名,给其赋值 true 可以达到调用 stopPropagation 同样的效果。

  • 或者你在事件处理器(通过 on... 属性注册)的回调返回 true,这个返回值决定了事件是否被取消,这里的取消的作用要根据事件的类型而定。

element.onclick = function () { return true}
  • 调用 preventDefault 则是阻止默认事件。

注: jQuery 注册事件时返回 false 是一种用于同时调用 e.preventDefault 和 e.stopPropagation 的快捷方式。

事件回调

这里主要提我自己平常没重视的地方~ 例如:
1.回调函数的this被设置为注册该事件的 DOM 元素。
2.混用时的调用顺序。
首次设定 事件处理器 为非 null 值时的顺序,就是该事件处理器的值被调用的顺序。

<button id="test" >Start Demo</button>
<script>
var button = document.getElementById('test');
button.addEventListener('click', function () { alert('ONE') }, false);
button.setAttribute('onclick', "alert('NOT CALLED')"); // event handler listener is registered here
button.addEventListener('click', function () { alert('THREE') }, false);
button.onclick = function () { alert('TWO'); };
button.addEventListener('click', function () { alert('FOUR') }, false);
</script>
//alert 顺序 one 、two 、three、 four

推荐阅读:
从Chrome源码看浏览器的事件机制

相关文章

  • --

    react事件机制 react基于浏览器原生事件机制,封装了一套自己的事件机制,包括事件注册、事件合成、冒泡和捕获...

  • JavaScript 异步编程的几个方法

    原文地址基于浏览器事件轮回机制(以及nodejs中的事件轮询机制),JavaScript常常会运行在异步环境中。而...

  • 阻止浏览器事件冒泡

    不同的浏览器对事件的解析机制不同,所以就会触发不同的事件,影响我们操作,如何取解决浏览器事件冒泡 ,所谓的事件冒泡...

  • 16.3 JavaScript的执行机制

    浏览器事件轮询机制 js执行为单线程 网络请求、setTimeout、addEventListener属于异步事件...

  • 2020最新面试题

    1.react生命周期 新特性 redux router 2.js事件运行机制 3.浏览器缓存机制 4.浏览器存...

  • 浏览器事件机制

    本意是讲 react 事件机制的,但仔细想想..我连浏览器本身的事件机制也不是十分清晰 事件传播 事件传播的三个阶...

  • 浏览器事件机制

    浏览器事件机制(即冒泡和捕获,也称为事件流) 基础知识 操作系统最先知道用户点击了鼠标,浏览器次之 child 被...

  • 浏览器事件机制

    一、概述 浏览器事件流存在三个阶段:捕获阶段、目标阶段、冒泡阶段,捕获和冒泡是事件传播的两种截然相反的方式。 二、...

  • 浏览器事件机制

    概述 浏览器事件传播存在三个阶段:捕获阶段,目标阶段,冒泡阶段 捕获阶段:从window对象派发到事件目标的父级的...

  • 浏览器和Node事件循环的区别

    事件循环,是 js 中老生常谈的一个话题了,而在浏览器和 Node 中的事件循环执行机制也不相同,浏览器的事件循环...

网友评论

      本文标题:浏览器事件机制

      本文链接:https://www.haomeiwen.com/subject/nfuilftx.html