jsAPIS-DomEvent

news/2024/9/18 5:10:07/文章来源:https://www.cnblogs.com/moonquakes/p/18304205

APIs

申明变量const优先

对于变量申明,常见的申明方式包括:var、let、conts。由于var老旧,我们避免使用和var进行变量声明。

那么在定义变量时如何判断使用let还是const?

对于常量(后续不会改变)变量,使用const进行申明。对于会发生变化的变量,使用let进行声明。常见情景有以下:

  • for循环中,我们一般使用let来定义一个自增的变量i。

  • 对于不会发生改变的字符串或其他数据,我们一般使用const来进行声明。

考虑以下情况:若使用const定义一个数组,使用push增加元素,是否会报错?

const arr = [1,2]
arr.push(3)

答案是不会报错。由于对数组进行push操作不会改变数组的内存地址,可以对arr进行push操作。但如果令arr=[3,4],则会报错,因为这个操作需要开辟新的内存空间,将arr变成一个新的对象,即修改了arr对象。

const对象里面存储的不是值,而是地址

DOM树和DOM对象

作用:使用JS去操作html和浏览器

分类:DOM(文档对象模型),BOM(浏览器对象模型)

DOM——文档对象模型

DOM是浏览器提供的一套专门用来操作网页内容的功能。用于开发网页特效和实现用户交互。(如改变p标签中的内容来实现随机点名)

DOM树——文档树

将HTML文档以树状结构直观地表示出来,称为DOM树

作用:直观地体现标签与标签之间的关系

![cd1774957cfa42cd8d1646d0c3d3f352](file:///C:/Users/universal/Pictures/Typedown/cd177495-7cfa-42cd-8d16-46d0c3d3f352.png?msec=1721053221390)

DOM对象

dom对象是浏览器根据html标签生成的JS对象,所有的标签属性都可以在这个对象上面找到,修改这个对象的属性可以自动映射到标签上。

const div = document.querySelector('div') // div就是一个dom对象
console.dir(div) // div中有属性和方法

document对象

是DOM里提供的一个对象,可以用来访问和操作网页内容。如:document.write()

获取操作DOM对象

获取第一个对象

<p id="nav">导航栏</p>const nav = document.querySelector('#nav') // 获取id为nav的document对象
nav.style.color = 'red' // 修改颜色

获取全部对象,返回值为一个数组(伪数组,有长度有索引,但是无pop、push等数组方法)

const list = document.querySelectorAll("div")

这两种获取方法都是使用css选择器来进行对象的获取,里面写css选择器,必须加上引号。

其他获取

其他获取方法:如document.getDocument.getElementById()等等,但已经不再使用

修改对象属性

可以通过JS设置或者修改标签元素属性,比如通过src更新图片链接

最常见的属性有herf、scr、title等

<img src="./images/1.webq" alt="">
const img = document.quertSelector('img') // 获取元素图片 
img.src = '/images/2.webp'

操作属性中的样式

1、使用document对象进行样式的修改,生成的是行内样式表,权重比较高

对象.style.样式 -> 更改属性样式,样式使用小驼峰命名法

const box = document.querySelector('.box')
box.style.width = '300px' //对于有单位的属性样式,需要加'',否则不会生效// 更换背景图片
document.body.style.backgroudImage = "url()"

2、操作类名操作CSS

当需要修改的样式很多时,可以通过添加类名来操作样式 简洁。

className是用新值换旧值,若之前有设置类名,则将会覆盖原类名

// 获取元素
const div = document.querySelector('div')
// 添加类名 class是个关键字,我们使用className
// 即给该元素添加类名
div.className = 'box'
// 若还需要原来的类 则
div.className = "nav box"

3、通过classList操作类控制CSS

为了解决className直接覆盖原类名的问题,我们可以通过classList方式来追加和删除类名

语法:三个方法,注意加(),不替换以前的类名,只追加或者删除

元素.classList.add('类名') 注意:类名不加"."

元素.classList.remove(''类名')

元素.classList.toggle('类名')

// 获取元素
const box = document.querySelector('box')
// 追加类名
box.classList.add('active')
// 切换类 toggle() 有就删掉,没有就加上
box.classList.toggle('active')

修改对象内容

获取document对象的内容:

1、元素.innerText对文本修改,不解析标签,以下情况会对文字进行加粗

<div class = "box">我是文字内容</div>
const box = document.querySelector('.box')
box.innerText = "<strong>我是一个盒子</strong>"

2、元素.innerHtml对元素进行修改,会对标签进行解析

<div class = "box">我是文字内容</div>
const box = document.querySelector('.box')
box.innerHtml = "<strong>我是一个盒子</strong>"

轮播图实战

// 对象数组,存放着轮播图对象,包括title、color等属性
const sliderData = [{},{}]
// 生成一个随机数
const random = parseInt(Math.random()*sliderData.length)
// 将对应数据渲染到标签里面
// 1、获取图片
const img = document.querySelector('.slider-wrapper img')
// 2、修改图片路径 = 对象.url
img.src = sliderData[random].url
// 3、将p里面的文字内容更换
const p = document.querySelector('.slider-footer p')
// 4、修改p的title
p.innerHTML = sliderData[random].title
// 5、修改背景颜色
const footer = document.querySelector('.slider-footer')
footer.style.backgroundColor = sliderData[random].color 
// 6、小圆点颜色 使用反引号简化字符串拼接
const li = document.querySelector(`.slider-indicator li:nth-child(${random + 1})`)
// 7、给当前的小li添加类
li.classList.add('active')

定时器——间歇函数

定时器常见于倒计时效果。或其他需要每隔一段时间自动执行的代码,不需要手动触发

间歇函数

开启定时器:

setInterval(函数, 间隔时间):作用是每隔一段时间调用该函数,间隔时间单位是毫秒

setInterval(函数名, 间隔时间)

// 简单的间歇函数,可以使用匿名函数
setInterval(finction(){console.log('一秒打印一次')
},1000)function fn(){}
setInterval(fn,1000)获取定时器的Id

关闭计时器:

// 获取定时器id m是定时器的id
let m = setInterval(function(){},1000);
m.clearInterval(m)

关闭后重新开启定时器,定时器ID会改变

事件监听

事件监听的概念以及简单案例

  • 事件事件指的是系统内发生的动作或发生的事情,如:用户单机一个按钮、用户鼠标在轮播图上悬停

  • 事件监听让程序检测是否有事件发生,一旦有事件触发就调用一个函数来做出响应,也称为绑定事件或者注册事件。如:鼠标经过时显示下拉菜单,鼠标悬停在轮播图上时轮播图暂停自动切换

语法:元素对象.addEventListener('事件类型', 要执行的函数)

事件监听的三要素:

1、事件源:dom元素

2、事件类型:如鼠标点击click、鼠标经过mouseover

3、事件处理程序:要做什么事

鼠标事件

鼠标触发

  • click 鼠标点击

  • mouseenter 鼠标经过

  • mouseleave 鼠标离开

    const btn = document.querySelector('.btn')
    btn.addEventListener('click',function(){
    alter('点击了')
    })

焦点事件

表单获取光标

  • focus 获取焦点

  • blur 失去焦点

键盘事件

键盘触发

  • keydown 键盘按下

  • keyup 键盘弹起

文本事件

表单输入触发

  • input 表单输入事件

    // 用户输入文本事件
    const input = document.querySelector('input')
    input.addEventLisener('input',function(){
    // 打印用户的输入内容
    console.log(input.value)
    })

案例:统计输入框字数,判断是否超过最大长度。不断获取输入框内的字符数,并更新显示

// 获取文本域
const tx = document.querySelector("#tx")
// 获取字符统计total
const total= document.querySelector(".total")
// 当文本域活得焦点,将total显示出来(显示当前字符数)
tx.addEventListener('focus',function(){// 将透明度改为1 即显示total.style.opacity = 1
})
// 当文本域失去焦点,将total隐藏起来
tx.addEventListener('blur',function(){// 将透明度改为0 即隐藏total.style.opacity = 0
})
// 检测用户输入
tx.addEventListener('input',function(){total.innerHTML = `${tx.value.length}/200字`
})

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

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

相关文章

泰山派学习14--pinctr、gpio子系统控制设备树LED

1、在泰山派设备树的/根节点上添加zbl_led子节点(路径:Z:\sdk\linux\kernel\arch\arm64\boot\dts\rockchip)打开tspi-rk3566-user-v10-linux.dts设备树源文件在根目录下添加gpioled子节点2、在SDK上编译kernel(./build.sh kernel)执行内核编译:./build.sh kernel内核编译…

JavaScript全解析——本地存储✔(localStorage~sessionStorage~cookie)

●就是浏览器给我们提供的可以让我们在浏览器上保存一些数据●常用的本地存储(localStorage~sessionStorage~cookie)1-localStorage => 特点:-> 长期存储,除非手动删除否则会一直保存在浏览器中 清除缓存或者卸载浏览器也就没有了-> 可以跨页面通讯, 也就是说在一个…

三种交换方式的比较

一、互联网的核心部分 网络核心部分是互联网中最复杂的部分。 网络中的核心部分要向周围网络边缘的大量主机提供连通性,使边缘部分任何一个主机都能够向其他主机通信。 在网络核心部分起特殊作用的是路由器。 路由器是实现分组交换的关键构件,其任务是转发收到的分组,这是网…

gateway 使用细节

spring:cloud:gateway:routes:- id: test_my_provider # 自定义,全局唯一即可uri: http://localhost:8081 # 实际调用的地址predicates:- Path=/test/** # 请求匹配规则- id: test_my_consumeruri: http://localhost:8082predicates:- Path=/feign/**上一篇文章 gateway 快速入…

长链剖分笔记

与轻重链剖分相似. dfs1:高度 \(h\)、\(son\);dfs2:\(top\). 性质 1:到根最多 \(O(\sqrt n)\) 条轻边. (证明:长链长度最坏情况:1, 2, 3...) 性质 2:\(x\) 的 \(k\) 级祖先 \(y\) 所在的长链长度 \(\ge k\).(证明:若非,则 \(y-x\) 是一条更长的链,矛盾.) 树上 \(…

【漏洞分析】DoughFina 攻击事件分析:不做任何参数检查的去杠杆合约

背景介绍 2024 年 7 月 12 日,DoughFina 协议遭受了黑客攻击,造成本次攻击的主要原因是 ConnectorDeleverageParaswap 合约没有对输入参数进行检查,且该合约为 DSA 合约的 owner。攻击者可以构造恶意参数窃取 DSA 合约的资金。 攻击交易 https://app.blocksec.com/explorer/…

SpringCloud启动报错Did you forget to include spring-cloud-starter-loadbalancer?

当我在gateway项目中添加了feign依赖时,报错:   原因:因为在springcloudFeign在Hoxton.M2 RELEASED版本之后就不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错解决办法:引入依赖即可1 <dependency> 2 …

圆方树

一些概念 割点:无向图中,若删除点x及其连边,连通块变多,那么x为割点。 点双连通:若点对x和y,删除任意非x和非y节点后,x和y仍然联通,称x和y点双连通。 点双联通子图:无向图中的一个子图G,G中任意两点都是点双连通的,那么G为原图的一个点双连通子图。 点双联通分量:无…

链表引用——约瑟夫问题

约瑟夫问题Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环…

LogRotate 切割 Nginx 日志

发布于 2023-12-04 10:20:327140举报文章被收录于专栏:码农UP2U一直以来做日志切割都是使用 shell + crontab 来搞,shell 脚本可以在网上找到各种版本的,改改就用了,懒省事。这样的做法很传统,却忽略了系统的给我们提供的优秀的工具 —— logrotate。 一、Logrotate 是什么…

SQL Server中Upsert的三种方式(转载)

本文介绍了SQL Server中Upsert的三种常见写法以及他们的性能比较。SQL Server并不支持原生的Upsert语句,通常使用组合语句实现upsert功能。假设有表table_A,各字段如下所示:int型Id为主键。方法1:先查询,根据查询结果判断使用insert或者updateIF EXISTS (SELECT 1 FROM ta…

2024/7/15 模拟赛 记录

noip NOI plus!几乎全员爆蛋( 本来能拿T1 20pts 暴力分的,但是居然CE了!!! max里两个参数,一个int一个longlong dev居然没报!!!光荣爆蛋(我估计是全场唯一一个没过编的:( 题解已存至网盘 https://fzoishare.xndxfz.com:7123/