• 浏览器工作原理(四):浏览器事件解读


    参考:https://zhuanlan.zhihu.com/p/23059366

    一、事件的监听

    事件监听的三种方式:

    1、html内联属性:<button onclick="btnClick"></button>

    2、DOM属性绑定:document.getElementById("btn").onclick = function () {}

    3、事件监听函数:document.getElementById("btn").addEventListener("click", ()=>{}, false)

    function addEventHandler(obj, eventName, handler) {
        if (document.addEventListener) {
            obj.addEventListener(eventName, handler, false);
        }
        else if (document.attachEvent) {
            obj.attachEvent("on" + eventName, handler);
        }    
        else {
            obj["on" + eventName] = handler;
        }
    }

    二、事件移除

    1、document.getElementById("btn").removeEventListener("click", ()=>{}, false)

    2、document.getElementById("btn").detachEvent("onclick")

    3、document.getElementById("btn").onclick = null

    function removeEventHandler(obj, eventName, handler) {
        if (document.removeEventListener) {
            obj.removeEventListener(eventName, handler, false);
        }
        else if (document.detachEvent) {
            obj.detachEvent("on" + eventName, handler);
        }
        else {
            obj["on" + eventName] = null;
        }
    }

    三、事件触发过程

    事件触发过程分三个阶段:捕获阶段、目标阶段、冒泡阶段

    1、捕获阶段:用户对 DOM 元素进行操作,从 Window 依次经过 docuemnt、html、body等,到达目标元素父节点的过程称为捕获阶段,注意此时还未到达目标节点。

    2、目标阶段:捕获阶段结束,事件到达目标元素并触发事件的过程是目标阶段

    3、冒泡阶段:目标元素触发事件结束后,向父元素逐级返回的过程

    四、事件委托

    事件委托是指,某元素的事件自己不处理,而是借助事件冒泡原理交由目标元素的父级或祖级元素处理的机制。例如,li列表事件可以绑定到ul,radio列表事件可以绑定在父级元素

    1、为什么要事件委托

    减少时间绑定,提升性能(事件绑定会占用内存)

    动态监听,避免增加或删除元素导致的事件绑定

    2、流程

    事件到达目标元素后,冒泡返回,被已绑定事件的父级或祖级元素响应执行。其中,事件对象中的 target 属性记录实际触发本次事件的元素

    五、阻止事件冒泡

    在不希望事件冒泡的时候可以阻止该机制

    function preventBubble(e) {
        if (!e) {
            const e = window.event;
        }
        e.cancelBubble = true;
        if (e.stopPropagation) {
            e.stopPropagation();
        }
    }
  • 相关阅读:
    Datawhale-新闻文本分类-task4-基于深度学习的文本分类1-fastText
    Datawhale-新闻文本分类-task3-机器学习分类
    (String)、toString、String.valueOf的区别
    抽象类与接口
    内部类详解
    关键字this---static---final
    Intent系列讲解---Intent简介以及相关属性
    Activity系列讲解---Activity的四大启动模式
    Activity系列讲解---Activity运行时的屏幕方向,全屏,窗体模式的设置
    Activity系列讲解---返回结果的处理
  • 原文地址:https://www.cnblogs.com/zs-note/p/9633131.html
Copyright © 2020-2023  润新知