• DOM Event


    具体有很多的细节,网址在https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

    react 的合成时间之前我也写过,翻翻博客就能看到。

    Syntax

    // 仔细看,这个东西有三个参数
    target.addEventListener(type, listener [, options]);
    // useCapture 捕获 还是冒泡
    target.addEventListener(type, listener [, useCapture]);
    

    parameters

    • type

      具体有哪些类型到这里去看:https://developer.mozilla.org/en-US/docs/Web/Events

    • listener

      具体有哪些 listener 可以到这里去看:https://developer.mozilla.org/en-US/docs/Web/API/EventListener

      对于我们开发者来说,我们不知道的或者忽略了的是:

      listener 是可以传一个对象的,比如说

      document.body.addEventListener("click", { handleEvent: function() {console.log("!!!")}})
      

      这样的好处是,我们点一个 click 可以触发很多的 event

    • options

      • capture true 就是捕获 false 就是冒泡
      • once 执行一次
      • passive 用了 passive 就是说不会 preventDefault,也就是说声明了,这个东西不会阻止默认的事件。紧接着呢,我们可以放心的用于异步。passive 对于性能是有很大的提升的。比如 scroll、touchMove 这种高频的事件,把它换成 passive。

    capture

    捕获还是冒泡。

    捕获和冒泡自己之前都是死记硬背,现在有了新的思路。我们来看看下面的 event.html

    <div id="a" style=" 100%;height: 300px; background: blue">
    	<div id="b" style=" 100%;height: 200px; background: pink">
      </div>  
    </div>
    

    写完 HTML,上 JS

    // 获取 DOM 节点
    var a = document.getElementById('a');
    var b = document.getElementById('b');
    

    我们想象一下,假如你是一个浏览器的实现者,假如你的鼠标点了一个点的时候,你第一个收到的信息是什么?

    x, y 相对于 viewport

    有了 x,y,你是如何知道你点了哪个元素的???

    元素位置与坐标比较,和 box tree 去比较???

    答案是层级从上到下,肯定是先跟最外层的 root 元素去比,然后一层一层 从外往里面找,这就是一个捕获的过程。捕获了以后,如何让父级元素知道已经捕获了呢?这个时候就是从里往外的冒泡传递。

    捕获和冒泡是谁先呢???肯定是捕获呀,都从 root 节点找着来。同一个元素,捕获先,冒泡后。

    所以,很简单。捕获过程和冒泡过程的区分。

    捕获

    // 加入了 true,就成了一个捕获型的事件
    a.addEventListener("click", () => {console.log("a1")}, true)
    b.addEventListener("click", () => {console.log("b1")}, true)
    // 输出结果,a1 b1
    

    冒泡

    // 加入了 false,就成了一个冒泡型的事件
    a.addEventListener("click", () => {console.log("a2")}, false)
    b.addEventListener("click", () => {console.log("b2")}, false)
    // 输出结果,b2 a2
    
  • 相关阅读:
    Java 二分查找
    Java 快速排序法 冒泡排序法 选择排序法 插入排序法
    XAF-BI.Dashboard模块概述 web/win
    XAF-列表视图数据访问模式
    XAF-列表视图编辑模式
    XAF-UI元素概述
    如何为CriteriaOperator过滤对象转换为lambda表达式,即:linq to xpo的动态where语句
    XAF视频教程来啦,已出15课
    如何隐藏winform中报表设计器中的按钮
    ReportDesigner中实现保存,保存所有,注册ICommandHandler方式实现
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13274544.html
Copyright © 2020-2023  润新知