当前位置: 首页 > news >正文

【JS】APIs:事件流、事件委托、其他事件、页面尺寸、日期对象与节点操作

1 事件流

捕获阶段:从父到子

冒泡阶段:从子到父

1.1 事件捕获

<body>
<div class="fa"><div class="son"></div>
</div>
<script>const fa=document.querySelector('.fa');const son=document.querySelector('.son');// 事件捕获,从父到子;冒泡阶段:从子到父// 事件冒泡:默认,当一个元素触发事件,会依次调用父级元素的同级事件,比如'click'
document.addEventListener('click',function(){
alert('我是yeye')
},true)
fa.addEventListener('click',function(){
alert('我是father')
},true)
son.addEventListener('click',function(){
alert('我是son')
},true)
</script>
<!-- 结果:yeye->father->son -->
</body>

1.2 事件冒泡

<body>
<div class="fa"><div class="son"></div>
</div>
<script>const fa=document.querySelector('.fa');const son=document.querySelector('.son');// 事件冒泡:默认,当一个元素触发事件,会依次调用父级元素的同级事件,比如'click'
document.addEventListener('click',function(){
alert('我是yeye')
})
fa.addEventListener('click',function(){
alert('我是father')
})
son.addEventListener('click',function(){
alert('我是son')
})
</script>
//结果:son->father->yeye

1.3 阻止冒泡

son.addEventListener('click',function(e){
alert('我是son')
e.stopPropagation()
})
<!-- 结果:只有son的alert -->

1.4 阻止捕获

// 在yeye身上加,而不是在son的身上加
document.addEventListener('click',function(e){
alert('我是yeye')
e.stopPropagation()
},true)

1.5 解绑事件

<body>
<button>提交</button>
<script>
const btn=document.querySelector('button')
btn.onclick=function(){}
// L0事件移除解绑
btn.onclick=null
function fn(){}
// 绑定事件
btn.addEventListener('click',fn)
// 解绑事件
// L2事件移除解绑
btn.removeEventListener('click',fn)
</script>
</body>

1.5 鼠标经过事件

1.6 两种注册事件区别

2 事件委托

2.1 事件委托

<body>
<ul><li>1111111111</li><li>2222222222</li><li>3333333333</li><span>66666666</span>
</ul>
<script>// 子元素没有绑定事件,但是冒泡到了父元素身上,点li跳出警告11
const ul=document.querySelector('ul')
ul.addEventListener('click',function(e){alert('11')// console.dir()可以显示一个对象所有的属性和方法// e.target是我们点击的那个对象console.dir(e.target)// 只点击li才有效果if(e.target.tagName==='LI'){e.target.style.color='red'}
})
</script>

2.2 Tab栏切换(用事件委托)

<body><div class="tab"><div class="tab-nav"><h3>每日特价</h3><ul><li><a class="active" href="javascript:; " data-id="0">精选</a></li><li><a href="javascript:;" data-id="1">美食</a></li><li><a href="javascript:;" data-id="2">百货</a></li><li><a href="javascript:;" data-id="3">个护</a></li><li><a href="javascript:;" data-id="4">预告</a></li></ul></div><div class="tab-content"><div class="item active"><img src="./image/tab00.png" alt="" /></div><div class="item"><img src="./image/tab01.png" alt="" /></div><div class="item"><img src="./image/tab02.png" alt="" /></div><div class="item"><img src="./image/tab03.png" alt="" /></div><div class="item"><img src="./image/tab04.png" alt="" /></div></div></div>
<script>const ul=document.querySelector('ul')const items=document.querySelectorAll('.item')ul.addEventListener('click',function(e){document.querySelector('.tab-nav .active').classList.remove('active')e.target.classList.add('active')// 下面大盒子模块// i是字符串型,'1'+1为'11'const i=+e.target.dataset.iddocument.querySelector('.tab-content .active').classList.remove('active')//document.querySelector(`.tab-content .item:nth-child(${ i + 1 })`).classList.add('active')//  第二种方法items[i].classList.add('active')
})
</script>
</body>

3 其他事件

3.1 阻止元素默认跳转

<a href="#">跳转</a>
</ul>
<script>
const a=document.querySelector('a')
a.addEventListener('click',function(e){// 不让你跳转e.preventDefault()
})
</script>

3.2 页面加载事件

<head><meta charset="UTF-8"><script>// 当页面所有资源执行完毕,再去执行回调函数window.addEventListener('load',function(){const a=document.querySelector('a')a.addEventListener('click',function(e){e.preventDefault()})})// 当图片资源执行完毕,再去执行回调函数img.addEventListener('load',function(){const a=document.querySelector('a')a.addEventListener('click',function(e){e.preventDefault()})})// 给document加,当HTML文档被完全加载和解析执行完成(不等样式、图片加载完),再去执行回调函数document.addEventListener('DOMContentLoaded',function(){const a=document.querySelector('a')a.addEventListener('click',function(e){e.preventDefault()})})</script>
</head>

3.3 元素滚动事件

<body>
<script>// 可以读取,可以赋值window.addEventListener('scroll',function () {// document.documentElement获取html元素console.log(document.documentElement.scrollTop)})
</script>
</body>

注意不能少这句:

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

3.4 页面尺寸

getBoundingClientRect():

<body><div></div><script>const div=document.querySelector('div')// 返回元素的大小和距离视口的位置console.log(div.getBoundingClientRect());</script>

3.4 案例

3.4.1 仿新浪固定头部

 .header {
//修改top: -80px;
} 
<script>const sk=document.querySelector('.sk')const header=document.querySelector('.header')window.addEventListener('scroll',function(){const n=document.documentElement.scrollTop// if(n>=sk.offsetTop)// {//     header.style.top=0// }else{//     header.style.top='-81px'// }header.style.top=n>=sk.offsetTop?0:'-80px'})</script>

3.4.2 blibli点击小滑块移动效果

  <script>const list = document.querySelector('.tabs-list')const line = document.querySelector('.line')list.addEventListener('click', function (e) {if (e.target.tagName === 'A') {//translatex设置对象沿X轴平移line.style.transform = `translateX(${e.target.offsetLeft}px)`}})</script>

 过渡效果:

.suspension .channel-menu .tabs .tabs-list .line {transition: all 0.5s;
}

3.4.3 电梯导航

APIs-day3-114-综合案例-电梯导航案例上集_哔哩哔哩_bilibili

见资源包源码

4 日期对象

日期对象作用:获取系统时间

4.1 实例化

  <script>const n1=new Date()console.log(n1);const n2=new Date('2030-6-6')console.log(n2);</script>

4.2 日期对象方法

效果:

<body><div></div><script>// 获得现在的时间年月日时分秒const div=document.querySelector('div')const n1=new Date()function fn(){const n=new Date()let h=n.getHours()let m=n.getMinutes()let s=n.getSeconds()h=h<10?'0'+h:hm=m<10?'0'+m:ms=s<10?'0'+s:s// getMonth()取值0-11return `现在的时间是${n.getFullYear()}年:${n.getMonth()+1}月${n.getDate()}日:${h}:${m}:${s}`}div.innerHTML=fn()setInterval(() => {div.innerHTML=fn()}, 1000);2024/3/10 11:20:44//得到日期对象div.innerHTML=n1.toLocaleString()//2024/3/10 11:20:44div.innerHTML=n1.toLocaleDateString()//2024/3/10div.innerHTML=n1.toLocaleTimeString()//11:21:48</script>
</body>

4.3 时间戳

从1970.1.1到某个时间的毫秒数

将来的时间戳-现在的时间戳=剩余时间毫秒数

<script>const date=new Date()// 获取时间戳第一种方法console.log(date.getTime())// 获取时间戳第二种方法// new Date()本来是字符型,+''变为数字型console.log(+new Date());// 获取时间戳第三种方法,不需要实例化console.log(Date.now());const arr=['星期日','星期一','星期二','星期三','星期四','星期五','星期六']// getDay()返回的是0-6,如果今天是星期天,那就返回0console.log(arr[date.getDay()]);</script>

4.4 毕业倒计时案例

  <script>function getime(){const n=+new Date()const f=+new Date('2024-8-1 00:00:00')// 转换为秒数const t=(f-n)/1000let h=parseInt(t/60/60%24)h=h<10?'0'+h:hlet m=parseInt(t/60%60)m=m<10?'0'+m:mlet s=parseInt(t%60)s=s<10?'0'+s:sdocument.querySelector('#hour').innerHTML=hdocument.querySelector('#minutes').innerHTML=mdocument.querySelector('#sceond').innerHTML=s}getime()setInterval(getime,1000)</script>

5 节点操作

DOM树每一个内容都是一个节点

节点类型:元素节点、属性节点、文本节点

5.1 查找节点

5.1.1 查找父节点

<body><div class="box"><div class="box1">1</div></div><div class="box"><div class="box1">2</div></div><div class="box"><div class="box1">3</div></div><script>const n=document.querySelectorAll('.box1')for(let i=0;i<n.length;i++){n[i].addEventListener('click',function(){// display='none'消除盒子所占地方,从第一个开始关,下一个就顶上来// this.parentNode父节点查找this.parentNode.style.display='none'})}</script>
</body>

效果:点击一个,这一个就没有了

5.1.2 查找子节点

<body><ul><li><span>123</span></li><li></li><li></li><li></li><li></li></ul><script>const ul=document.querySelector('ul')console.log(ul.children);//得到的是伪数组,仅获得所有元素节点</script>
</body>

5.1.3 查找兄弟节点

<body><ul><li><span>123</span></li><li>1</li><li>2</li><li>3</li><li>4</li></ul><script>const li3=document.querySelector('ul li:nth-child(3)')console.log(li3.previousElementSibling);//上一个兄弟console.log(li3.nextElementSibling);//下一个兄弟</script>
</body>

 

 5.2 增加节点

5.2.1 增加节点

<body><ul><li><span>123</span></li><li>1</li><li>2</li><li>3</li><li>4</li></ul><script>const ul=document.querySelector('ul')// 创建节点const lihou=document.createElement('li')lihou.innerHTML='我是创建的lihou'// 增加节点,插入到这个父元素的最后ul.appendChild(lihou)//  增加节点,插入到这个父元素指定位置之前const libef=document.createElement('li')libef.innerHTML='我是创建的libef'ul.insertBefore(libef,ul.children[0])</script>
</body>

 5.2.2克隆节点

<body><ul><li><span>123</span></li><li>1</li><li>2</li><li>3</li><li>4</li></ul><script>const ul=document.querySelector('ul')// cloneNode(true)深克隆表示ul.children[0]里面有什么东西全拿过来;(),(false)浅克隆只克隆标签ul.appendChild(ul.children[0].cloneNode())</script>
</body>

 

5.3 删除节点

<body><ul><li><span>123</span></li><li>1</li><li>2</li><li>3</li><li>4</li></ul><script>const ul=document.querySelector('ul')// 没有父子关系删除不成功ul.removeChild(ul.children[0])</script>
</body>

 

 6 swiper插件

Swiper中文网-轮播图幻灯片js插件,H5页面前端开发

7 学生信息表案例

APIs-day4-124-今日综合案例-学生信息表上集_哔哩哔哩_bilibili

代码见资源

相关文章:

【JS】APIs:事件流、事件委托、其他事件、页面尺寸、日期对象与节点操作

1 事件流 捕获阶段&#xff1a;从父到子 冒泡阶段&#xff1a;从子到父 1.1 事件捕获 <body> <div class"fa"><div class"son"></div> </div> <script>const fadocument.querySelector(.fa);const sondocument.qu…...

定制红酒:如何根据客户需求调整红酒口感与风格

在云仓酒庄洒派&#xff0c;云仓酒庄洒派深知不同消费者对于红酒的口感与风格有着不同的喜好和需求。因此&#xff0c;云仓酒庄洒派根据消费者的具体要求&#xff0c;灵活调整红酒的口感与风格&#xff0c;以满足他们的期望。 首先&#xff0c;云仓酒庄洒派会与消费者进行深入的…...

利用excel批量修改图片文件名

今天同事提出需求要实现利用excel批量修改某文件夹下的图片重命名&#xff0c;衡量到各种条件&#xff0c;最后还是选择了vbs来实现。代码如下 代码 创建Excel对象 Set objExcel CreateObject("Excel.Application") objExcel.Visible False 隐藏Excel窗口 打开Ex…...

间隔5分钟执行1次Python脚本设置步骤 —— 定时执行专家

《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件&#xff0c;用于在 Windows 系统上定时执行各种任务&#xff0c;包括执行脚本或程序。 下面是使用 "定时执行专家" 软件设置定时执行 Python 脚本的步骤&#xff1a; 步骤 1: 设置 P…...

计算机网络基础【信息系统监理师】

计算机网络基础【信息系统监理师】 1、OSI七层参考模型2、TCP/IP协议3、网络拓扑结构分类4、网络传输介质分类5、网络交换技术6、网络存储技术7、网络规划技术8、综合布线系统8.1、综合布线工程内容8.1、隐蔽工程-金属线槽安装8.2、隐蔽工程-管道安装槽道与各种管线间的最小净距…...

网络安全风险评估:详尽百项清单要点

网络安全风险评估是识别、分析和评估组织信息系统、网络和资产中潜在风险和漏洞的系统过程。主要目标是评估各种网络威胁和漏洞的可能性和潜在影响&#xff0c;使组织能够确定优先顺序并实施有效的安全措施来减轻这些风险。该过程包括识别资产、评估威胁和漏洞、分析潜在影响以…...

不会用虚拟机装win10?超详细教程解决你安装中的所有问题!

前言&#xff1a;安装中有任何疑问&#xff0c;可以在评论区提问&#xff0c;博主身经百战会快速解答小伙伴们的疑问 BT、迅雷下载win10镜像&#xff08;首先要下载win10的镜像&#xff09;&#xff1a;ed2k://|file|cn_windows_10_business_editions_version_1903_updated_sep…...

洛谷 素数环 Prime Ring Problem

题目描述 PDF 输入格式 输出格式 题意翻译 输入正整数 nn&#xff0c;把整数 1,2,\dots ,n1,2,…,n 组成一个环&#xff0c;使得相邻两个整数之和均为素数。输出时&#xff0c;从整数 11 开始逆时针排列。同一个环恰好输出一次。n\leq 16n≤16&#xff0c;保证一定有解。 多…...

【DPDK】基于dpdk实现用户态UDP网络协议栈

文章目录 一.背景及导言二.协议栈架构设计1. 数据包接收和发送引擎2. 协议解析3. 数据包处理逻辑 三.网络函数编写1.socket2.bind3.recvfrom4.sendto5.close 四.总结 一.背景及导言 在当今数字化的世界中&#xff0c;网络通信的高性能和低延迟对于许多应用至关重要。而用户态网…...

开源好用的所见即所得(WYSIWYG)编辑器:Editor.js

文章目录 特点基于区块干净的数据 界面与交互插件标题和文本图片列表Todo表格 使用安装创建编辑器实例配置工具本地化自定义样式 今天介绍一个开源好用的Web所见即所得(WYSIWYG)编辑器&#xff1a; Editor.js Editor.js 是一个基于 Web 的所见即所得富文本编辑器&#xff0c;它…...

sqlite 损坏 修复

步骤1 SQLite Download Page下载sqlite3 对应的系统版本 2.参考怎么恢复sqlite 数据库文件✅ - 有乐数据恢复网 sqlite3 dbname > .mode insert > .output dbdump.sql > .dump > .exit 恢复方法1 1.创建一个新的数据库 例如名字叫 test.db 2sqlite3 test.…...

初学Vue——Vue路由

0 什么是Vue路由 类似于Html中的超链接(<a>)一样&#xff0c;可以跳转页面的一种方式。 前端路由&#xff1a;URL中hash(#号之后的内容)与组件之间的对应关系&#xff0c;如下图&#xff1a; 当我们点击左侧导航栏时&#xff0c;浏览器的地址栏会发生变化&#xff0c;路…...

如何使用宝塔面板搭建Discuz并结合cpolar实现远程访问本地论坛

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…...

llc的基波分析法

对于我们之前分析的 LLC等效谐振电路的分析&#xff0c;其实我们发现分析的并不是完整的方波输入&#xff0c;而是用正弦波来分的 那么为何用基波来分析呢&#xff0c;因为对于方波而言&#xff0c;根据傅里叶级数它是可以分解成基波、 1次、3次、5次.......等各种奇次谐波的入…...

一键清除JavaScript代码中的注释:使用正则表达式实现

这个正则表达式可以有效地匹配 JavaScript 代码中的各种注释&#xff0c;并且跳过了以 http: 或 https: 开头的链接。 /\/\*[\s\S]*?\*\/|\/\/[^\n]*|<!--[\s\S]*?-->|(?<!http:|https:)\/\/[^\n]*/gvscode 实战&#xff0c;ctrlF 调出查找替换工具&#xff0c;点…...

第七次作业

IPSEC VPPN实验配置 目标&#xff1a;在FW5和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 1.FW1和FW2进行双机热备&#xff08;之前实验没保存&#xff0c;可看上个实验&#xff09; 还有一些配置前面实验有。 2.场景选择点对点…...

在jupyternotebook中,如何解决作图时负号无法显示的问题?

输入以下代码即可。 import matplotlib as mpl mpl.rcParams[axes.unicode_minus] False 原文链接&#xff1a;在jupyternotebook中&#xff0c;如何解决作图时负号无法显示的问题&#xff1f;...

ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

发生的错误信息&#xff1a; File "C:\Users\malongqiang\.conda\envs\ObjectDetection\lib\ssl.py", line 1309, in do_handshakeself._sslobj.do_handshake() ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。 分析原因&#xff1a; …...

主流开发语言与环境介绍

主流开发语言与环境介绍 1. 引言 随着计算机科学的不断发展&#xff0c;各种编程语言和开发环境层出不穷。选择一种适合自己的主流开发语言和环境是每个开发者都必须面临的问题。本文将为大家介绍几种目前最为流行的主流开发语言和环境&#xff0c;帮助读者选择合适的工具进行…...

Unity性能优化篇(九) 模型优化之LOD技术概述以及操作方法

LOD模型优化技术概述: 1.LOD技术可以根据摄像头远近来显示不同精度的模型(例如吃鸡游戏 随着跳伞高度 来显示下面树木以及建筑的模型精度) LOD模型优化技术操作方法: 可使用Unity自带的LOD Group组件&#xff0c;并根据项目的情况来调整该组件的属性。Untiy资源商店也有一些其…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...