JavaScript 笔记 --- part 4 --- Web API (part 2)

news2025/4/21 14:04:28

(webAPI part2) DOM 基本操作

事件流

  • 定义: 指的是事件完整执行过程中的流动路径

    • 捕获阶段: 事件从最外层的窗口对象开始,逐层向内传播到目标元素,并触发相应的事件处理程序。

    • 冒泡阶段: 事件从目标元素开始,逐层向外传播到最外层的窗口对象,并触发相应的事件处理程序。

事件捕获


document.addEventListener('click', function(event) {
  console.log('文档');
}, true)                // 第三个参数为true表示使用事件捕获, false表示使用事件冒泡, 默认为false

father.addEventListener('click', function(event) {
console.log('父亲');
}, true)

son.addEventListener('click', function(event) {
console.log('儿子');
}, true)

- 点击 son 元素,输出顺序为:文档、父亲、儿子。
- 点击 father 元素,输出顺序为:文档、父亲。
- 点击 document 元素,输出顺序为:文档。

事件冒泡


document.addEventListener('click', function(event) {
  console.log('文档');
})

father.addEventListener('click', function(event) {
console.log('父亲');
})

son.addEventListener('click', function(event) {
console.log('儿子');
})

- 点击 son 元素,输出顺序为:儿子、父亲、文档。
- 点击 father 元素,输出顺序为:父亲、文档。
- 点击 document 元素,输出顺序为:文档。

  • 阻止冒泡: event.stopPropagation()

事件解绑

DOM.romoveEventListener("click", 函数名);

阻止元素默认行为

const form = duocument.querySelector("form");
form.addEventListener("submit", function (event) {
  event.preventDefault(); // 阻止默认提交行为
});

事件委托

  • 定义: 将事件监听器添加到父元素上,当子元素触发事件时,元素通过事件冒泡机制将事件传递给父元素的事件监听器,从而实现事件的委托。

  • 优点: 减少内存占用,提高性能。

  • 原理: 利用事件冒泡,父元素的事件监听器可以监听到子元素的事件,从而实现事件的委托。

// 父元素
const ul = document.querySelector("ul");
ul.addEventListener("click", function (event) {
  // 子元素
  if (event.target.tagName === "LI") {
    // 判断点击的是不是子元素
    event.target.style.color = "blue"; //使用target属性获取触发事件的元素
    const id = event.target.dataset.id; // 使用dataset属性获取自定义属性值
  }
});

更多事件类型

页面加载事件: load / domcontentloaded

  • load: 页面加载完成时触发。

    它不仅可以监听页面的加载完成,还可以监听页面的资源加载情况,比如图片、样式表、脚本等。

// 等待页面所有资源加载完毕, 就执行回调函数
window.addEventListener("load", function () {});
  • domcontentloaded: 页面 DOM 结构加载完成时触发。

    它与 load 事件不同,它只会在 DOM 结构加载完成时触发,不会等待资源的加载。

// 等待DOM结构加载完成, 就执行回调函数
document.addEventListener("DOMContentLoaded", function () {});

元素滚动事件

  • 可以个页面添加, 也可以给元素添加。
window.addEventListener("scroll", function (event) {
  consol.log("页面滚动了");
});
  • 获取位置
  1. scrollTop: 获取或设置当前页面的垂直滚动条的位置。(被卷去的部分)

  2. scrollLeft: 获取或设置当前页面的水平滚动条的位置。

  • 它们的值可读写, 类型为数字型
/*页面平滑滚动*/
html {
  scroll-behavior: smooth;
}
const div = document.querySelector("div");
window.addEventListener("scroll", function (event) {
  const n = document.documentElement.scrollTop;
  if (n > 100) {
    div.style.display = "block";
  }
});

页面尺寸事件

window.addEventListener("resize", function (event) {
  console.log("页面尺寸变化了");
});
  • 获取尺寸
const div = document.querySelector("div");
console.log(div.clientWidth); // 盒子宽度
console.log(div.clientHeight); // 盒子高度

元素尺寸与位置

  1. offsetwidth: 元素的宽度,包括内容宽度和内边距。(包括边框和间距)

  2. offsetheight: 元素的高度,包括内容高度和内边距。

  3. offsetTop: 元素相对于其定位父元素的上边缘的距离。(只读属性)

  4. offsetLeft: 元素相对于其定位父元素的左边缘的距离。

    • 若 3 和 4 的父元素无定位, 则找定位祖先元素, 直至 body 元素为止。
  5. element.getBoundingClientRect(): 获取元素的边界框信息(相对于视口), 返回一个对象。

日期对象

实例化

const date = new Date(); // 当前日期和时间

const date1 = new Date(year, month, day, hours, minutes, seconds, milliseconds); // 指定日期和时间

方法

  1. getFullYear(): 获取完整的年份。

  2. getMonth(): 获取月份(0-11)。

  3. getDate(): 获取日期(1-31)。

  4. getDay(): 获取星期几(0-6)。

  5. getHours(): 获取小时(0-23)。

  6. getMinutes(): 获取分钟(0-59)。

  7. getSeconds(): 获取秒(0-59)。

  8. getMilliseconds(): 获取毫秒(0-999)。

  9. getTime(): 获取从 1970 年 1 月 1 日午夜到当前时间的毫秒数。

  10. getTimezoneOffset(): 获取时区偏移量。

  11. setFullYear(year): 设置完整的年份。

  12. setMonth(month): 设置月份(0-11)。

  13. setDate(day): 设置日期(1-31)。

  14. setHours(hours): 设置小时(0-23)。

  15. setMinutes(minutes): 设置分钟(0-59)。

  16. setSeconds(seconds): 设置秒(0-59)。

  17. setMilliseconds(milliseconds): 设置毫秒(0-999)。

  18. setTime(milliseconds): 设置从 1970 年 1 月 1 日午夜到指定时间的毫秒数。

  19. toUTCString(): 将日期对象转换为 UTC 格式的字符串。

  20. toDateString(): 将日期对象转换为日期格式的字符串。

  21. toTimeString(): 将日期对象转换为时间格式的字符串。

  22. toLocaleString(): 将日期对象转换为本地格式的字符串。

时间戳

  • 定义: 时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒(北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒)起至现在的总秒数。

  • 使用场景: 如果计算倒计时效果, 前面方法无法直接计算, 需要借助于时间戳完成。

  • 算法:

  1. 获取当前时间戳:

    • const timestamp = Date.now();

    • const timestamp = +new Date();

    • const timestamp = (new Date()).getTime();

  2. 计算倒计时:

    • const d = parseInt(总秒数 / 60 / 60 / 24); 计算天数

    • const h = parseInt((总秒数 / 60 / 60) % 24); 计算小时数

    • const m = parseInt((总秒数 / 60) % 60); 计算分钟数

    • const s = parseInt(总秒数 % 60); 计算秒数

节点操作

  • DOM节点: 指的是文档对象模型(Document Object Model)中的节点, 包括元素节点、属性节点、文本节点、注释节点等。

查找节点(根据元素之间的关系)

  • 父节点查找: 子元素.parentNode, 返回值值为object, 找不到返回null

  • 子节点查找: 父元素.children , 返回值值为array(仅包含子元素节点), 找不到返回空数组

  • 兄弟节点查找: 元素.previousElementSibling(前一个兄弟节点) 或 元素.nextElementSibling(后一个兄弟节点), 返回值类型为object, 找不到返回null

创建节点(新增元素节点)

  • 创建节点: document.createElement(标签名) , 返回值类型为object, 即新创建的元素节点

  • 插入节点(方法一): 父元素.appendChild(新元素名) , 插入到最后

  • 插入节点(方法二): 父元素.insertBefore(新元素名, 参照元素) , 插入到参照元素之前

  • 克隆节点: 元素.cloneNode(true/false) , true表示深复制, false表示浅复制, 返回值类型为object, 即新创建的元素节点

删除节点

  • 删除节点: 父元素.romoveChild(子元素) , 删除该元素节点

M端事件

  • tauchstart: 手指触摸屏幕时触发

  • touchmove: 手指在屏幕上滑动时触发

  • touchend: 手指从屏幕上松开时触发

JS插件(swiper)

  1. 官网: https://swiper.com.cn/

  2. 下载: https://swiper.com.cn/download

  3. 引入: 下载压缩包, 解压, 找到 package文件夹, 引入 js文件和 css文件即可。

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

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

相关文章

测试基础笔记第六天

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、操作系统1.什么是操作系统2.操作系统的常见分类 二、linux系统1.linux发行版本2.文件和路径3.远程连接操作常见的远程连接工具远程连接基本步骤 三、linux命令操…

Edge Impulse 训练openMV分类模型(字母+数字)

前言 使用openMV Cam H7 Plus 固件4.5.9尝试多种方式均失败(模板匹配、ORB特征识别),还毁了一个sd卡,还是老老实实用Edge Impulse 训练吧 准备字母数字图片,使用Python生成,文件名要存成“A.jpg”这样&…

Linux 动、静态库的实现

前言:当我们写了一段代码实现了一个方法,如果我们不想把方法的实现过程暴露给别人看,可以把代码打包成一个库,其中形成后缀为.a的是静态库,后缀为.so的为动态库;当别人想使用你的方法时,把打包好…

C++11特性补充

目录 lambda表达式 定义 捕捉的方式 可变模板参数 递归函数方式展开参数包 数组展开参数包 移动构造和移动赋值 包装器 绑定bind 智能指针 RAII auto_ptr unique_ptr shared_ptr 循环引用 weak_ptr 补充 总结 特殊类的设计 不能被拷贝的类 只能在堆上创建…

PcVue助力立讯:精密制造的智能化管控实践!

PcVue助力立讯: 精密制造的智能化管控实践! 客户介绍 立讯精密(Luxshare ICT,股票代码:002475)成立于2004年5月24日,专注于为消费电子产品、汽车领域产品以及企业通讯产品提供从核心零部件、…

jmeter中文乱码问题解决

修改jmeter.properties配置文件‌ 进入JMeter安装目录的bin文件夹,找到jmeter.properties文件。搜索参数sampleresult.default.encodingUTF-8,取消注释(删除行首的#),并将其值改为UTF-8。保存文件并‌重启JMeter‌生效…

最新扣子空间实操指南

一、首先要先获取到内部测试的邀请码, 我们先打开扣子空间官网:https://space.coze.cn/ 输入邀请码后进入该页面: 它这里支持文件上传,扩展里面有很多插件,页支持MCP各种插件. 探索模式有两种,一种是ai自…

JavaScript 一维数组转二维数组

题目描述&#xff1a; <script>const num [1,2,3,4]const out (function(num,m,n){if(num.length ! m*n){return []}const newarr []for(let i 0;i<m;i){newarr.push(num.slice(i*n,(i1)*n))}return newarr})(num,2,2)console.log(out)</script>不使用Stri…

WIN10重启开机不用登录,直接进入桌面

我们个人机不需要登录。 步骤1 置&#xff0c;帐户&#xff0c;登录选项&#xff0c;密码。 输入当前密码后&#xff0c;直接下一步。 再次重启&#xff0c;就会发现不需要密码了。

开源项目FastAPI-MCP:一键API转换MCP服务

在当今AI开发的世界中,应用程序与AI模型之间的无缝集成至关重要。 模型上下文协议(Model Context Protocol, MCP)通过允许AI模型访问外部工具和数据源,弥合了这一差距。 FastAPI MCP是一个强大的工具,它可以通过最少的配置将您现有的FastAPI端点转换为MCP兼容的工具。 本…

python课堂随记

11.15 连接符 namemcl print(我叫,name) print(我叫name)#连接符 age18 print(我叫name年龄str(age)) #连接符需要数据类型相同 11.17随记 除法运算神奇 8/5 #1.6 8//5 #1 -8/5 #-1.6 -8//5 #-2 ##次方表示—两个** 3的27次方 27的3次方 小结 程序的书写&…

Agent安装-Beszel​​ 轻量级服务器监控平台

docker-compose安装 beszel-agent 安装 docker-compose 配置文件 services:beszel-agent:image: henrygd/beszel-agent:latestcontainer_name: beszel-agentrestart: unless-stoppednetwork_mode: hostvolumes:- ./beszel_socket:/beszel_socket- /var/run/docker.sock:/var…

算法—选择排序—js(场景:简单实现,不关心稳定性)

选择排序原理&#xff1a;&#xff08;简单但低效&#xff09; 每次从未排序部分选择最小元素&#xff0c;放到已排序部分的末尾。 特点&#xff1a; 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) 不稳定排序 // 选择排序 function selectionSort(arr) {for (let …

【统计分析120】统计分析120题分享

1-30 判断题 数学模型 指的是通过抽象、简化现实世界的某些现象&#xff0c;利用数学语言来描述他们的结构和行为&#xff0c;做出一些必要的假设&#xff0c;运用适当的数学工具&#xff0c;得到一个数学结论 数学模型&#xff1a;指的是通过抽象、简化现实世界的某些现象&am…

【计量地理学】实验四 主成分分析与莫兰指数

一、实验内容 &#xff08;一&#xff09; 某地区35个城市2004年的7项经济统计指标数据见&#xff08;数据中的“题目1”sheet&#xff09;。 &#xff08;1&#xff09;试用最短距离聚类法对35个城市综合实力进行系统聚类分析&#xff0c;并画出聚类谱系图: 在此次实验内容…

手写call,bind,apply

foo.Mycall(obj,1,2,3) Function.prototype.Mycallfunction(target,...args){if(typeof this!function){throw new TypeError(this is not a function)}// 判断target是否是对象if(targetnull||targetundefined){targetwindow}if(typeof target!object){targetObject(target)}/…

【读书笔记·VLSI电路设计方法解密】问题64:什么是芯片的功耗分析

低功耗设计是一种针对VLSI芯片功耗持续攀升问题的设计策略。随着工艺尺寸微缩&#xff0c;单颗芯片可集成更多元件&#xff0c;导致功耗相应增长。更严峻的是&#xff0c;现代芯片工作频率较二十年前大幅提升&#xff0c;而功耗与频率呈正比关系。因此&#xff0c;芯片功耗突破…

Ubuntu18.04安装Qt5.12

本文介绍了在Ubuntu18.04环境下安装QT QT5.12相关安装包下载地址 https://download.qt.io/archive/qt/5.12/ Linux系统下Qt的离线安装包以.run结尾 (sudo apt-get install open-vm-tools open-vm-tools-desktop解决无法paste的问题) 安装 1.cd命令 终端进入对应的文件夹下面 2.…

max31865典型电路

PT100读取有很多种方案&#xff0c;常用的惠斯通电桥&#xff0c;和专用IC max31865 。 电阻温度检测器(RTD)是一种阻值随温度变化的电阻。铂是最常见、精度最高的测温金属丝材料。铂RTD称为PT-RTD&#xff0c;镍、铜和其它金属亦可用来制造RTD。RTD具有较宽的测温范围&#x…

数据通信学习笔记之OSPF的区域

OSPFArea 用于标识一个 OSPF 的区域 区域是从逻辑上将设备划分为不同的组&#xff0c;每个组用区域号 (Area ID)来标识 OSPF 的区域 ID 是一个 32bit 的非负整数&#xff0c;按点分十进制的形式(与 IPV4 地址的格式一样)呈现&#xff0c;例如 Area0.0.0.1。 为了简便起见&#…