【基础类】—DOM事件系统性学习

一、基本概念:DOM事件的级别

// DOM0
element.onclick=function(){}
// DOM2, 新增了冒泡和捕获
element.addEventListener('click',function(){}, false)
// DOM3, 新增更多事件类型 鼠标、键盘等
element.addEventListener('keyup',function(){}, false)

二、DOM事件模型

捕获和冒泡

三、DOM事件流

事件流:浏览器再页面做交互的过程中,比如点击鼠标左键,这个左键如何传递到页面上,就是事件流
完整事件流: 捕获 → 目标阶段 → 冒泡

四、描述DOM事件捕获的具体流程

  1. 事件捕获:是从上到下的过程
  2. 第一个接收事件的对象是window
  3. 具体流程: window → document → html → body → … (按照html结构往下传递) → 目标元素
<!-- 模拟DOM时间的捕获的具体流程 --><div id="eve"><style>#eve {width: 100px;height: 100px;background-color: aqua;text-align: center;line-height: 100px;font-size: 20px;}</style>目标元素</div><script type="text/javascript">var ev = document.getElementById('eve');ev.addEventListener('click', function() {console.log('目标元素');}, true);document.body.addEventListener('click', function() {console.log('body');}, true);document.addEventListener('click', function() {console.log('document');}, true);window.addEventListener('click', function() {console.log('window');}, true);document.documentElement.addEventListener('click', function() {console.log('html');}, true);</script>

在这里插入图片描述

  1. 如何使用js获取html节点:document.documentElement

五、Event对象的常见应用

  1. event.preventDefaylt() 阻止默认事件
    场景描述:比如有一个需求,再点击a标签时,做一些js逻辑,需要阻止a标签的跳转行为
  2. event.stopPropagation() 阻止事件冒泡
    场景描述:父元素绑定事件A和子元素绑定事件B,我希望点击子元素时,只触发事件B, 不需要往上冒泡触发父元素的事件A
  3. event.stoplmmediatePropagation() 阻止事件冒泡 + 阻止相同事件监听被调用
    场景描述:假设一个元素同时绑定两个click事件,再第一次执行click事件时,执行stoplmmediatePropagation,阻止冒泡的同时也阻止了第二个click时间
div.addEventListener("click" , function(){alert("第一次执行");stopImmediatePropagation();
} , true);
​
div.addEventListener("click" , function(){alert("第二次执行");
} , true);// 点击div,第二次执行不会触发
  1. event.currentTarget 获取绑定事件的DOM对象
    场景描述:给ul绑定事件,event.currentTarget 获取ul的dom对象

  2. event.target 获取实际触发事件的DOM对象
    场景描述:给多个li标签绑定click事件,一般情况下会循环li节点,给每一个li绑定事件。这种情况会消耗大量的性能,可以通过事件委托的方式,把所有li事件绑定到一个ul上,通过event.target获取具体是哪一个li被点击

六、自定义事件(模拟事件)

  1. Event 自定义事件
var eve = new Event('custome');  // 声明一个自定义事件对象
var dom = document.getElementById("dom");
// 给dom节点绑定自定义事件
dom.addEventListener('custome',function(){console.log('custome')
})
// 触发自定义事件
dom.dispatchEvent(eve)
// custome
  1. CustomEvent 自定义事件,可待参数
var eve = new CustomEvent('custome', {detail: {name: '张三', phone: '13751032412'}}); // 声明一个自定义事件对象, 允许加参数
var dom = document.getElementById("dom");
// 给dom节点绑定自定义事件
dom.addEventListener('custome',function(e){console.log('参数', e.detail)
})
// 触发自定义事件
dom.dispatchEvent(eve)
// 参数 {name: '张三', phone: '13751032412'}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 学习

这里写目录标题 说一说JVM的内存区域JVM 内存模型volatile的使用及其原理Java中类加载过程是什么样的?方法区内存溢出怎么处理?谈谈动态年龄判断哪些是 GC Roots?强引用、软引用、弱引用、虚引用是什么,有什么区别?工作中常用的 JVM 配置参数有哪些?谈谈对 OOM 的认识谈谈…

解决在mybatis中使用class属性绑定映射文件出现的异常问题~

如下所示&#xff0c;当我在XML文件中通过class属性配置其mapper文件时&#xff0c;出现下述错误 <mappers><mapper class"mappers.userMapper"/> </mappers>错误描述&#xff1a; 解决方法如下所示&#xff1a;在pom.xml文件中添加下述代码 <…

网络安全进阶学习第十一课——MySQL手工注入(2)

文章目录 一、UA注入1、原理2、靶场演示&#xff1a;1&#xff09;一旦页面出现如下现状&#xff0c;就可以使用UA注入2&#xff09;BP抓包3&#xff09;修改User-Agent 二、referer注入1、原理2、靶场演示&#xff1a;1&#xff09;使用BP抓包2&#xff09;修改Referer 三、DN…

计算机视觉的延伸整理

计算机视觉是一门涉及数字图像处理、模式识别和机器学习等技术的交叉学科&#xff0c;旨在将计算机技术应用于对视觉信息的理解和处理。其主要研究内容包括图像和视频处理、目标检测和跟踪、三维重建、人脸识别、自动驾驶等。计算机视觉已经被广泛应用于医学影像分析、安防监控…

C#IEnumberable<>

在C#中&#xff0c;IEnumerable<>是一个泛型接口&#xff0c;用于表示一个可枚举的集合。它定义了一个用于遍历集合元素的枚举器&#xff08;enumerator&#xff09;。通过实现IEnumerable<>接口&#xff0c;我们可以使用foreach语句或LINQ查询等方式来迭代访问集合…

element-ui 图片上传 及 quillEditor富文本(图片视频上传)

<template><div class"card" style"overflow: hidden; padding-bottom: 10px"><div style"padding: 20px 20px 0 20px"><span class"title_top"><span class"top_icon"></span>基本信息…

SQL基础复习与进阶

SQL进阶 文章目录 SQL进阶关键字复习ALLANYEXISTS 内置函数ROUND&#xff08;四舍五入&#xff09;TRUNCATE&#xff08;截断函数&#xff09;SEILING&#xff08;向上取整&#xff09;FLOOR&#xff08;向下取整&#xff09;ABS&#xff08;获取绝对值&#xff09;RAND&#x…

RPC原理与Go RPC详解

文章目录 RPC原理与Go RPC什么是RPC本地调用RPC调用HTTP调用RESTful API net/rpc基础RPC示例基于TCP协议的RPC使用JSON协议的RPCPython调用RPC RPC原理 RPC原理与Go RPC 什么是RPC RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;即远程过程调用。它允许像调用…

React Native元素旋转一定的角度

mMeArrowIcon: {fontSize: 30, color: #999, transform: [{rotate: 180deg}]},<Icon name"arrow" style{styles.mMeArrowIcon}></Icon>参考链接&#xff1a; https://reactnative.cn/docs/transforms https://chat.xutongbao.top/

ID生成方案总结

分布式ID生成方案 UUID数据库自增号段模式Redis实现雪花算法&#xff08;SnowFlake&#xff09;百度Uidgenerator美团Leaf滴滴TinyID 本文重点介绍能够ID自增的Leaf和TinyID 号段模式 这种模式也是现在生成分布式ID的一种方法&#xff0c;实现思路是会从数据库获取一个号段…

MikTex+TexStudio踩坑记

首先&#xff0c;去这两个的官网&#xff0c;下载安装&#xff0c;都没问题。 第二&#xff0c;记得以管理员方式运行程序&#xff0c;可能会少很多麻烦 第三&#xff0c;编译的时候&#xff0c;命令行提示错误&#xff1a; So far, no MiKTeX administrator has checked fo…

AcWing 24:机器人的运动范围 ← BFS、DFS

【题目来源】https://www.acwing.com/problem/content/description/22/【题目描述】 地上有一个 m 行和 n 列的方格&#xff0c;横纵坐标范围分别是 0∼m−1 和 0∼n−1。 一个机器人从坐标 (0,0) 的格子开始移动&#xff0c;每一次只能向左&#xff0c;右&#xff0c;上&#…

【雕爷学编程】Arduino动手做(182)---DRV8833双路电机驱动模块2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【LangChain】Prompts之Prompt templates

Prompts 编程模型的新方法是通过提示(prompts)。 prompts是指模型的输入。该输入通常由多个组件构成。 LangChain 提供了多个类和函数&#xff0c;使构建和使用prompts变得容易。 Prompt templates(提示模板): 参数化模型输入Example selectors(选择器示例): 动态选择要包含在…

EventBus 开源库学习(一)

一、概念 EventBus是一款在 Android 开发中使用的发布-订阅事件总线框架&#xff0c;基于观察者模式&#xff0c;将事件的接收者和发送者解耦&#xff0c;简化了组件之间的通信&#xff0c;使用简单、效率高、体积小。 一句话&#xff1a;用于Android组件间通信的。 二、原理…

TypeScript最新语法总结

注意注意&#xff01;&#xff01;&#xff01;本文介绍的是最新的TypeScript4的重要语法 第一部分&#xff1a;TypeScript的简介 TypeScript 是由微软开发的一款开源的编程语言&#xff0c;TypeScript 是 Javascript 的超集&#xff0c;遵循最新的 ES6、ES5 规范&#xff0c…

做好“关键基础设施提供商”角色,亚马逊云科技加快生成式AI落地

一场关于生产力的革命已在酝酿之中。全球管理咨询公司麦肯锡在最近的报告《生成式人工智能的经济潜力&#xff1a;下一波生产力浪潮》中指出&#xff0c;生成式AI每年可能为全球经济增加2.6万亿到4.4万亿美元的价值。在几天前的亚马逊云科技纽约峰会中&#xff0c;「生成式AI」…

动手学深度学习(二)线性神经网络

推荐课程&#xff1a;跟李沐学AI的个人空间-跟李沐学AI个人主页-哔哩哔哩视频 回归任务是指对连续变量进行预测的任务。 一、线性回归 线性回归模型是一种常用的统计学习方法&#xff0c;用于分析自变量与因变量之间的关系。它通过建立一个关于自变量和因变量的线性方程&…

分布式协议与算法——拜占庭将军问题

拜占庭将军问题 背景&#xff1a;以战国时期为背景 战国时期&#xff0c;齐、楚、燕、韩、赵、魏、秦七雄并立&#xff0c;后来秦国的势力不断强大起来&#xff0c;成了东方六国的共同威胁。于是&#xff0c;这六个国家决定联合&#xff0c;全力抗秦&#xff0c;免得被秦国各个…

JVM面试突击1

JVM面试突击 JDK&#xff0c;JRE以及JVM的关系 我们的编译器到底干了什么事&#xff1f; 仅仅是将我们的 .java 文件转换成了 .class 文件&#xff0c;实际上就是文件格式的转换&#xff0c;对等信息转换。 类加载机制是什么&#xff1f; 所谓类加载机制就是 虚拟机把Class文…