js-day7

article/2025/6/7 23:49:03

JS学习之旅-day7

  • 1.事件流
    • 1.1 事件流与两个阶段说明
    • 1.2 事件捕获
    • 1.3 事件冒泡
    • 1.4 阻止
    • 1.5 解绑事件
  • 2. 事件委托
  • 3. 其他事件
    • 3.1 页面加载事件
    • 3.2 页面滚动事件
    • 3.3 页面尺寸事件
  • 4. 元素尺寸与位置

1.事件流

1.1 事件流与两个阶段说明

  1. 事件流指的是事件完整执行过程中的流动路径
  2. 两个阶段:
    1. 捕获阶段(事件捕获):Document->Element html->Element body->Element div
    2. 冒泡阶段(事件冒泡):Element div ->Element body->Element html->Document
    3. 简单来说:捕获是父到子,冒泡是子到父

1.2 事件捕获

  1. 概念:从DOM的根元素开始去执行对应的事件(从外到里)
  2. 代码:DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)
  3. 说明:
    1. addEventListener第三个参数传入 true 代表是捕获阶段触发
    2. 若传入false代表冒泡阶段触发,默认是false

1.3 事件冒泡

  1. 概念:当一个元素的事件被触发时,同样的事情将会在该元素的所有祖先元素中依次被触发。
  2. 简单理解:当一个元素触发事件后,会依次向上调用所有父亲组件的同名事件
  3. 代码:DOM.addEventListener(事件类型,事件处理函数,是否使用捕获机制)
  4. 第三个参数不写或者传入false

1.4 阻止

  1. 事件对象.stopPropagation():阻止传播(包含冒泡、捕获)
  2. 事件对象.preventDefault():阻止默认行为(包含链接跳转,表单域跳转)
  3. 在事件绑定的回调函数的第一个参数就是事件对象,一般命名为 event/ev/e

1.5 解绑事件

  1. L0
    btn.onclick = function () {alert('点击了')// 解绑事件btn.onclick = null
    }
    
  2. L2:removeEventListener(事件类型,事件处理函数,[添加时使用的阶段(true:捕获;false:冒泡])
    function fn() {alert('点击了')
    }
    //这里第三个参数为true的话,解绑的第三个参数也要为true
    btn.addEventListener('click', fn)  
    // 解绑事件
    btn.removeEventListener('click', fn)
    
    注意:匿名函数无法被解绑

2. 事件委托

  1. 事件委托是利用事件流的特效解决一些需求的知识技巧
  2. 优点:减少注册次数,可以提高程序性能
  3. 原理:利用事件冒泡。给父元素注册事件,当我们触发子元素时,会冒泡到父元素上,从而触发父元素的事件。
  4. 实现:事件对象.target可以获取到真正触发事件的元素,如果需要加判定条件可以使用事件对象.target.tagName

3. 其他事件

3.1 页面加载事件

  1. 加载外部资源(如图片、外联css和js等)加载完毕时触发的事件
    1. 事件名:load
    2. 监听页面所有资源加载完毕:给window添加load事件
      window.addEventListener('load',function(){})
      
    3. 针对某个资源绑定load事件
       const img = document.querySelector('#img')img.addEventListener('load',function(){console.log('图片加载完毕');})
      
  2. 当初始的HTML文档被完全加载后,DOMContentLoaded事件被触发,无需等待样式表、图片等完全加载
    1. 事件名:DOMContentLoaded
    2. 监听页面DOM加载完毕:给document添加DOMContentLoaded事件
      document.addEventListener('DOMContentLoaded',function(){})
      

3.2 页面滚动事件

  1. 事件名:scroll
  2. 监听整个页面的滚动:
    window.addEventListener('scroll',function(){})
    
  3. 监听某个元素内部的滚动,给某个元素加即可
  4. 获取位置:scrollLeft、scrollTop获取被卷去的大小,可读写
  5. 获取页面的滚动:document.documentElement.scrollTop,可以赋值
  6. 把内容滚动到指定坐标2:元素.scrollTo(x,y)

3.3 页面尺寸事件

  1. 在窗口尺寸改变时触发:resize
    window.addEventListener('resize',function(){})
    
  2. 获取宽高:clientWidth和clientHeight(不包含边框、margin、滚动条等)

4. 元素尺寸与位置

  1. 获取宽高:offsetWidth/offsetHeight

    1. 获取元素的自身宽高,包含元素自身设置的宽高、padding、border
    2. 取出来的是数值
    3. 注意:获取的是可视宽高,如果盒子是隐藏的,获取的是0
      在这里插入图片描述
  2. 获取位置:offsetLeft/offsetTop

    1. 获取元素距离自己最近的具有定位的祖先元素的左、上距离
    2. 注意:offsetLeft 和 offsetTop 是只读属性
  3. 返回元素大小及其相对视口的位置:element.getBoundingClientRect()


http://www.hkcw.cn/article/CpLevldVHP.shtml

相关文章

【Typst】5.文档结构元素与函数

概述 本节介绍Typst文档的核心文档结构元素及其对应函数,还有函数的用法。通过本节你将可以更好的使用脚本创建和控制页面元素。 系列目录 1.Typst概述2.Typst标记语法和基础样式3.Typst脚本语法4.导入、包含和读取5.文档结构元素与函数6.布局函数 set语句和sho…

每日八股文6.3

每日八股-6.3 Mysql1.COUNT 作用于主键列和非主键列时,结果会有不同吗?2.MySQL 中的内连接(INNER JOIN)和外连接(OUTER JOIN)有什么主要的区别?3.能详细描述一下 MySQL 执行一条查询 SQL 语句的…

【Linux】pthread多线程同步

参考文章:https://blog.csdn.net/Alkaid2000/article/details/128121066 一、线程同步 线程的主要优势在于,能够通过全局变量来共享信息。不过,这种便携的共享是有代价的;必须确保多个线程不会同时修改同一变量,或者某…

Spring AOP:面向切面编程 详解代理模式

文章目录 AOP介绍什么是Spring AOP?快速入门SpringAop引入依赖Aop的优点 Spring Aop 的核心概念切点(Pointcut)连接点、通知切面通知类型PointCut注解切面优先级Order切点表达式executionwithinthistargetargsannotation自定义注解 Spring AOP原理代理模式&#xff…

Ubuntu20.04用root(管理员身份)启动vscode

1.终端输入 code --user-data-dir~/.vscode --no-sandbox .

第7章 :面向对象

一、面向对象 面向过程:关心的是我该怎么做,一步步去实现这个功能 面向对象:关心的是我该让谁去做,去调用对象的操作来实现这个功能 面向对象 对象(Object) 分类(Classification) …

嵌入式linux八股文

1.指针的大小 指针大小的计算方式。指针的大小并非由其类型决定,而是与编译器的位数相关。具体来说,在 32 位的系统下,指针的大小为 4 个字节,而在 64 位的系统下,指针的大小为 8 个字节。通过示例代码的运行&#xf…

python可视化:端午假期旅游火爆原因分析

python可视化:端午假期旅游火爆原因分析 2025年的旅游市场表现强劲: 2025年端午假期全社会跨区域人员流动量累计6.57亿人次,日均2.19亿人次,同比增长3.0%。入境游订单同比大涨近90%,门票交易额(GMV&#…

ubuntu22.04安装taskfile

sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -dsudo mv ./bin/task /usr/local/bin/测试 task --version

Ubuntu22.04 安装 Miniconda3

Conda 是一个开源的包管理系统和环境管理系统,可用于 Python 环境管理。 Miniconda 是一个轻量级的 Conda 发行版。Miniconda 包含了 Conda、Python和一些基本包,是 Anaconda 的精简版本。 1.下载安装脚本 在 conda官网 找到需要的安装版本&#xff0…

LRC and VIP

//首先排除所有数相等的情况,再把最大值放在一个组&#xff0c;那么最大值的gcd就等于其本身&#xff0c;再判断剩下的gcd是否等于最大值就可以了 #include<bits/stdc.h> using namespace std;const int N1e3100; int a[N]; map<int,int>mapp; int main(){int t;ci…

AI Agent开发第78课-大模型结合Flink构建政务类长公文、长文件、OA应用Agent

开篇 AI Agent2025确定是进入了爆发期,到处都在冒出各种各样的实用AI Agent。很多人、组织都投身于开发AI Agent。 但是从3月份开始业界开始出现了一种这样的声音: AI开发入门并不难,一旦开发完后没法用! 经历过至少一个AI Agent从开发到上线的小伙伴们其实都听到过这种…

统信 UOS 服务器版离线部署 DeepSeek 攻略

日前&#xff0c;DeepSeek 系列模型因拥有“更低的成本、更强的性能、更好的体验”三大核心优势&#xff0c;在全球范围内备受瞩目。 本次&#xff0c;我们为大家提供了在统信 UOS 服务器版 V20&#xff08;AMD64 或 ARM64 架构&#xff09;上本地离线部署 DeepSeek-R1 模型的…

6月2日day43打卡

复习日 作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 任务写了两天&#xff0c;第一天找到一个数据集Stanford Cars Dataset&#xff08;斯坦福汽车数据集&#xff09;&#xff1a; 1. 基…

机器学习——聚类算法

一、聚类的概念 根据样本之间的相似性&#xff0c;将样本划分到不同的类别中的一种无监督学习算法。 细节&#xff1a;根据样本之间的相似性&#xff0c;将样本划分到不同的类别中&#xff1b;不同的相似度计算方法&#xff0c;会得到不同的聚类结果&#xff0c;常用的相似度…

蓝桥杯_DS18B20温度传感器---新手入门级别超级详细解析

目录 一、引言 DS18B20的原理图 单总线简介&#xff1a; ​编辑暂存器简介&#xff1a; DS18B20的温度转换与读取流程 二、代码配置 maic文件 疑问 关于不同格式化输出符号的使用 为什么要rd_temperature()/16.0&#xff1f; onewire.h文件 这个配置为什么要先读lo…

SuperMap GIS基础产品FAQ集锦(20250603)

一、SuperMap iDesktopX 问题1&#xff1a;这种投影坐标如何转换成China_2000的&#xff1f; 11.2.0 【解决办法】在数据源属性中&#xff0c;选择坐标系下的投影转换&#xff0c;然后指定转换结果的坐标系为China_2000 问题2&#xff1a;SuperMap iDesktopX 影像导出时&am…

【js 图片批量自定义打包下载】

压缩图片打包本地下载 一、依赖安转二、函数封装三、打包压缩四、应用五、示例图 一、依赖安转 打包工具 npm install file-saver --save npm install jszip --save二、函数封装 对图片进行处理 function getBase64Image(src) {return new Promise((resolve, reject) > …

如何轻松地将数据从 iPhone传输到iPhone 16

对升级到 iPhone 16 感到兴奋吗&#xff1f;恭喜&#xff01;然而&#xff0c;除了兴奋之外&#xff0c;学习如何将数据从 iPhone 传输到 iPhone 16 也很重要。毕竟&#xff0c;那些重要的联系人、笔记等都是不可或缺的。为了实现轻松的iPhone 到 iPhone 传输&#xff0c;我们总…

Adobe Acrobat——设置PDF打印页面的大小

1. 打开 PDF 文件&#xff1b; 2. 点击菜单栏的 “文件” → “打印”&#xff1b; 3. 在打印对话框中&#xff0c;点击 “属性”&#xff1b; 4. 点击 “布局”→ “高级”&#xff1b; 5. 点击 “纸张规格”&#xff0c;选择 “PostScript 自定义页面大小”&#xff0c;然后…