【javascript】Web APIs-Dom获取属性操作

目录

Web APIs-Dom获取&属性操作

Web API 基本认知

变量声明

建议: const 优先,尽量使用const,原因是:

1.1 作用和分类

1.2 什么是DOM

1.3 DOM树

1.4 DOM对象(重要)

2. 获取DOM对象

2.1 根据CSS选择器来获取DOM元素 (重点)

2. 选择匹配的多个元素

练习   请控制台依次输出 3个 li 的 DOM对象

3. 操作元素内容

1. 元素innerText 属性

2. 元素.innerHTML 属性

案例   年会抽奖案例 

本章节用到的素材可以自取:图片素材 

4.操作元素属性

4.1 操作元素常用属性

4.2 操作元素样式属性

1.通过 style 属性操作CSS

2. 操作类名(className) 操作CSS

3. 通过 classList 操作类控制CSS

练习   轮播图随机版

4.操作元素属性

4.3 操作表单元素 属性

4.4 自定义属性

5.定时器-间歇函数

1. 开启定时器

2. 关闭定时器

案例    阅读注册协议

综合案例:

案例    轮播图定时器版

核心代码: 

总结不易~本章节对我有很大所获,希望对你也是!!!!


Web APIs-Dom获取&属性操作

本章节用到的素材可以自取:图片素材

Web API 基本认知

变量声明

    变量声明有三个 var let 和 const
     我们应该用那个呢?
     首先var 先排除,老派写法,问题很多,可以淘汰掉…
     let or const ?

建议: const 优先,尽量使用const,原因是:

    const 语义化更好
    很多变量我们声明的时候就知道他不会被更改了,那为什么不用 const呢?
    实际开发中也是,比如react框架,基本const
如果你还在纠结,那么我建议:
    有了变量先给const,如果发现它后面是要被修改的,再改为let
常量可以使用const,这样就不会出现二次赋值的情况:

数组也可以使用const arr = []

那么问题来了,为什么数组const后还可以进行添加数组内容呢?

这里由于arr数组是一个复杂类型,再栈区存放的是地址空间,然后再堆区才存放的是数据内容,那么每次push并不是对const 地址空间进行修改,而是找到当前的地址空间后,区堆区进行添加数据内容,也就是说const数组,只要地址空间不进行改变,那么他所存放的数据内容可以随意改变!

const 声明的值不能更改,而且const声明变量的时候需要里面进行初始化
但是对于引用数据类型,const声明的变量,里面存的不是 值,不是值,不是值,是地址。

那么const数组的作用就是防止当前数组被某些别的数组直接进行覆盖,而发生地址空间的改变!!!

那么也就是说关于对象的追加和删除也是同样可以使用const来定义的

总结:

1. 以后声明变量我们优先使用哪个?
     const
     有了变量先给const,如果发现它后面是要被修改的,再改为let
2. 为什么const声明的对象可以修改里面的属性?
     因为对象是引用类型,里面存储的是地址,只要地址不变,就不会报错
     建议数组和对象使用 const 来声明
3. 什么时候使用let声明变量?
     如果基本数据类型的值或者引用类型的地址发生变化的时候,需要用let
     比如 一个变量进行加减运算,比如 for循环中的 i++

1.1 作用和分类

     作用: 就是使用 JS 去操作 html 和浏览器
    分类: DOM (文档对象模型)、 BOM (浏览器对象模型)

1.2 什么是DOM

DOM(Document Object Model—— 文档对象模型 )是用来呈现以及与任意 HTML 或 XML文档交互的API
白话文: DOM是浏览器提供的一套专门用来 操作网页内容 的功能
DOM作用
     开发网页内容特效和实现用户交互

1.3 DOM树

DOM树是什么
     将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树
     描述网页内容关系的名词
     作用: 文档树直观的体现了标签与标签之间的关系

1.4 DOM对象(重要)

DOM对象:浏览器根据html标签生成的 JS对象
     所有的标签属性都可以在这个对象上面找到
     修改这个对象的属性会自动映射到标签身上
DOM的核心思想
     把网页内容当做 对象 来处理
document 对象
    是 DOM 里提供的一个 对象
     所以它提供的属性和方法都是 用来访问和操作网页内容的
例:document.write()
     网页所有内容都在document里面

总结:

1. DOM 树是什么?
     将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM树
     作用: 文档树直观的体现了标签与标签之间的关系
2. DOM对象怎么创建的?
     浏览器根据html标签生成的 JS对象(DOM对象)
     DOM的核心就是把内容当 对象 来处理
3. document 是什么?
     是 DOM 里提供的一个 对象
     网页所有内容都在document里面

2. 获取DOM对象

2.1 根据CSS选择器来获取DOM元素 (重点)

1. 选择匹配的第一个元素

语法:

    document.querySelector('css选择器')
参数:
包含一个或多个有效的CSS选择器 字符串
返回值:
CSS选择器匹配的 第一个元素 ,一个 HTMLElement对象。
如果没有匹配到,则返回null。
多参看文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/querySelector

2. 选择匹配的多个元素

参数:
包含一个或多个有效的CSS选择器 字符串
返回值:
CSS选择器匹配的 NodeList 对象集合
例如:
    // 3. 我要选择所有的liconst lis = document.querySelectorAll('ul li')console.log(lis)

    // 1. 获取匹配第一个元素const box = document.querySelector('.box')console.log(box)const nav = document.querySelector('#nav')console.log(nav)// 2. 我要获取第一个liconst li = document.querySelector('ul li:first-child')console.log(li)// 3. 我要选择所有的liconst lis = document.querySelectorAll('ul li')console.log(lis)

总结:

1. 获取一个DOM元素我们使用谁?能直接操作修改吗?
    const nav = document.querySelector('#nav')console.log(nav)//修改nav.style.color = 'red'console.log(nav.style)
     querySelector()
     可以
2. 获取多个DOM元素我们使用谁?能直接修改吗? 如果不能可以怎么做到修改?
     querySelectorAll()
     不可以, 只能通过遍历的方式一次给里面的元素做修改

练习   请控制台依次输出 3个 li 的 DOM对象

    // 3. 我要选择所有的liconst lis = document.querySelectorAll('ul li')console.log(lis)
得到的是一个 伪数组
     有长度有索引号的数组
    但是没有 pop() push() 等数组方法
想要得到里面的每一个对象,则需要遍历(for)的方式获得。
注意:
    哪怕只有一个元素,通过querySelectAll() 获取过来的也是一个 伪数组 ,里面只有一个元素而已

也可以直接进行修改:

    const lis = document.querySelectorAll('ul li')console.log(lis)lis[0].style.color = 'red'

3. 操作元素内容

目标:能够修改元素的文本更换内容
DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象。
就是操作对象使用的点语法。
如果想要修改标签元素的里面的 内容 ,则可以使用如下几种方式:
1. 元素innerText 属性
    将文本内容添加/更新到任意标签位置
    显示纯文本,不解析标签

2. 元素.innerHTML 属性
    将文本内容添加/更新到任意标签位置
    会解析标签,多标签建议使用模板字符

总结:

1. 设置/修改DOM元素内容有哪2钟方式?
     元素.innerText 属性
     元素.innerHTML 属性
2. 三者的区别是什么?
     元素.innerText 属性 只识别文本,不能解析标签
     元素.innerHTML 属性 能识别文本,能够解析标签
     如果还在纠结到底用谁,你可以选择innerHTML

案例   年会抽奖案例 
本章节用到的素材可以自取:图片素材 
需求:从数组随机抽取一等奖、二等奖和三等奖,显示到对应的标签里面。
素材:
     html文件结构
    数组名单 '周杰伦', '刘德华', '周星驰', 'Pink老师', '张学友'
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>年会抽奖</title><style>.wrapper {width: 840px;height: 420px;background: url(./images/bg01.jpg) no-repeat center / cover;padding: 100px 250px;box-sizing: border-box;}</style>
</head><body><div class="wrapper"><strong>传智教育年会抽奖</strong><h1>一等奖:<span id="one">???</span></h1><h3>二等奖:<span id="two">???</span></h3><h5>三等奖:<span id="three">???</span></h5></div><script>const personArr = ['周杰伦', '刘德华', '周星驰', 'Pink老师', '张学友']for (let i = 0; i < 3; i++) {let num = Math.floor(Math.random() * personArr.length)const p = document.querySelectorAll('span')p[i].innerHTML = `${personArr[num]}`personArr.splice(num, 1)}</script>
</body></html>

4.操作元素属性

4.1 操作元素常用属性
还可以通过 JS 设置/修改标签元素属性,比如通过 src更换 图片
最常见的属性比如: href、title、src 等
语法:
  <img src="" alt=""><script>// 对象.属性 = 值// 1.获取元素const pic = document.querySelector('img')// 2.操作元素pic.src = './images/1.webp'pic.title = '溜得滑演出会'</script>
练习    页面刷新,图片随机更换
需求:当我们刷新页面,页面中的图片随机显示不同的图片
  <img src="" alt=""><script>const num = Math.floor(Math.random() * 7);const img = document.querySelector('img')img.src = `./images/${num}.webp`</script>

4.2 操作元素样式属性
还可以通过 JS 设置/修改标签元素的样式属性。
     比如通过 轮播图小圆点自动更换颜色样式
     点击按钮可以滚动图片,这是移动的图片的位置 left 等等
学习路径:
1. 通过 style 属性操作CSS
2. 操作类名(className) 操作CSS
3. 通过 classList 操作类控制CSS

1.通过 style 属性操作CSS
语法:
    // 对象.style.样式属性 = 值const box = document.querySelector('.box')box.style.width = '300px'box.style.height = '500px'box.style.backgroundColor = 'pink'box.style.border = '2px solid blue'box.style.borderRadius = '10px'box.style.borderTop = '2px solid red'
注意:
1. 修改样式通过 style 属性引出
2. 如果属性有- 连接符,需要转换为 小驼峰 命名法
3. 赋值的时候,需要的时候不要忘记加 css单位

练习     页面刷新,页面随机更换背景图片
需求:当我们刷新页面,页面中的背景图片随机显示不同的图片
分析:
①: 随机函数
②: css页面背景图片 background-image
③: 标签选择body, 因为body是唯一的标签,可以直接写 document.body.style
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>body {background-image: url(./images/desktop_1.jpg) no-repeat top center cover;}</style>
</head><body><script>const random = Math.floor(Math.random() * 11)document.body.style.backgroundImage = `url(./images/desktop_${random}.jpg)`</script>
</body></html>

这里的body标签单独记住!!!!

 document.body.style。backgroundImage = `url()`
2. 操作类名(className) 操作CSS
如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。
语法:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {width: 300px;height: 300px;background-color: skyblue;margin: 100px auto;padding: 10px;border: 1px solid #000;}.nav {color: red;}</style>
</head><body><div class="nav box">123</div><script>// 1. 元素获取const div = document.querySelector('.box')//2. 添加类名  class是个关键字 我们用classNamediv.className = 'nav box'</script>
</body></html>

注意:
1. 由于class是关键字, 所以使用className去代替
2. className是使用新值 旧值, 如果需要添加一个类,需要保留之前的类名

3. 通过 classList 操作类控制CSS
为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名
语法:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {width: 200px;height: 200px;}.active {color: red;background-color: pink;}</style>
</head> <body><div class="box">2123 </div><script>//通过classList添加类// 1. 获取元素const box = document.querySelector('.box')// 2.1 添加类  add()里面类名不加. 并且是一个字符串box.classList.add('active')// 2.2 删除类 remove()box.classList.remove('box')// 2.3 切换类 toggle() 有还是没有啊 有就删掉 没有就加上box.classList.toggle('box')box.classList.toggle('active')</script>
</body></html>
1. 使用 className 和classList的区别?
     修改大量样式的更方便
     修改不多样式的时候方便
     classList 是追加和删除不影响以前类名

练习   轮播图随机版

 本章节用到的素材可以自取:图片素材 

需求:当我们刷新页面,页面中的轮播图会显示不同图片以及样式
模块:
①:图片会随机变换
②:底部盒子背景颜色和文字内容会变换
③:小圆点随机一个高亮显示
这一题真的很有意义建议不熟悉的话自己多写几遍!!!
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>轮播图点击切换</title><style>* {box-sizing: border-box;}.slider {width: 560px;height: 400px;overflow: hidden;}.slider-wrapper {width: 100%;height: 320px;}.slider-wrapper img {width: 100%;height: 100%;display: block;}.slider-footer {height: 80px;background-color: rgb(100, 67, 68);padding: 12px 12px 0 12px;position: relative;}.slider-footer .toggle {position: absolute;right: 0;top: 12px;display: flex;}.slider-footer .toggle button {margin-right: 12px;width: 28px;height: 28px;appearance: none;border: none;background: rgba(255, 255, 255, 0.1);color: #fff;border-radius: 4px;cursor: pointer;}.slider-footer .toggle button:hover {background: rgba(255, 255, 255, 0.2);}.slider-footer p {margin: 0;color: #fff;font-size: 18px;margin-bottom: 10px;}.slider-indicator {margin: 0;padding: 0;list-style: none;display: flex;align-items: center;}.slider-indicator li {width: 8px;height: 8px;margin: 4px;border-radius: 50%;background: #fff;opacity: 0.4;cursor: pointer;}.slider-indicator li.active {width: 12px;height: 12px;opacity: 1;}</style>
</head><body><div class="slider"><div class="slider-wrapper"><img src="./images/slider01.jpg" alt="" /></div><div class="slider-footer"><p>对人类来说会不会太超前了?</p><ul class="slider-indicator"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><div class="toggle"><button class="prev">&lt;</button><button class="next">&gt;</button></div></div></div><script>// 1. 初始数据const sliderData = [{ url: './images/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },{ url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },{ url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },{ url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },{ url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },{ url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },{ url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },{ url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },]// 2. 需要一个随机数const random = Math.floor(Math.random() * sliderData.length)console.log(sliderData[random])//2.1 获取图片const img = document.querySelector(`.slider-wrapper img`)//2.2 更改路径img.src = sliderData[random].url//3 更换文本文字//3.1 获取文字const p = document.querySelector('.slider-footer p')//3.2 修改pp.innerHTML = sliderData[random].title//4.修改盒子颜色//4.1 获取颜色const footer = document.querySelector('.slider-footer')//4.2 修改颜色footer.style.backgroundColor = sliderData[random].color//5.添加小圆点const li = document.querySelector(`.slider-indicator li:nth-child(${random + 1})`)li.classList.add('active')</script>
</body></html>

4.操作元素属性
4.3 操作表单元素 属性
表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框
正常的有属性有取值的 跟其他的标签属性没有任何区别
     获取: DOM对象.属性名
     设置: DOM对象.属性名 = 新值
    // 1.获取元素const uname = document.querySelector('input')// 2.获取值 获取表单里面的值 用的是表单.valueconsole.log(uname.value)// console.log(uname.innerHTML) innerHTML 得不到表单的内容uname.value = '我要买电脑'console.log(uname.type)uname.type = 'password' //设置密码,看不见输入的内容

表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示 如果为true 代表添加了该属性 如果是false 代表移除了该属性
比如: disabled、checked、selected
    // 1.获取const ipt = document.querySelector('input')console.log(ipt.checked) //falseipt.checked = true  //勾选上// 1.获取const button = document.querySelector('button')console.log(button.disabled)button.disabled = true //按钮禁用

4.4 自定义属性
标准属性: 标签天生自带的属性 比如class id title等, 可以直接使用点语法操作比如: disabled、checked、selected
自定义属性:
     在html5中推出来了专门的data-自定义属性
     在标签上一律以data-开头
     在DOM对象上一律以dataset对象方式获取

 

5.定时器-间歇函数

 本章节用到的素材可以自取:图片素材 

1. 开启定时器
setInterval(函数,间隔时间(毫秒))1s = 1000ms

eg: 

注意:
1. 函数名字 不需要加括号
2. 定时器返回的是一个id数字

2. 关闭定时器

可以看出每打开一个定时器都会有不同的返回值,也就是定时器的序号数

那么由于可以单独拿到每一个定时器的序号数,也就说明可以单独对该序号进行关闭~

所以关闭定时器:

    clearInterval(m)
注意:
1. 函数名字 不需要加括号
2. 定时器返回的是一个id数字

案例    阅读注册协议

 本章节用到的素材可以自取:图片素材 

需求:按钮60秒之后才可以使用
分析:
①:开始先把按钮禁用( disabled 属性)
②:一定要获取元素
③:函数内处理逻辑
秒数开始减减
按钮里面的文字跟着一起变化
如果秒数等于0 停止定时器 里面文字变为 同意 最后 按钮可以点击
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><textarea name="" id="" cols="30" rows="10">用户注册协议欢迎注册成为京东用户!在您注册过程中,您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议,请您务必仔细阅读、充分理解协议中的条款内容后再点击同意(尤其是以粗体或下划线标识的条款,因为这些条款可能会明确您应履行的义务或对您的权利有所限制)。【请您注意】如果您不同意以下协议全部或任何条款约定,请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息,阅读并点击同意上述协议且完成全部注册流程后,即表示您已充分阅读、理解并接受协议的全部内容,并表明您同意我们可以依据协议内容来处理您的个人信息,并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方(详情查看</textarea><br><button class="btn">我已经阅读用户协议(60)</button><script>const btn = document.querySelector('.btn')// button按钮特殊 用innerHTMLbtn.disabled = truelet i = 5function fn() {btn.innerHTML = `我已经阅读用户协议(${i--})`if (i === -1) clearInterval(n), btn.disabled = false, btn.innerHTML = '同意'}let n = 0n = setInterval(fn, 1000)</script>
</body></html>

综合案例:

案例    轮播图定时器版

 本章节用到的素材可以自取:图片素材 

需求:每隔一秒钟切换一个图片
分析:
①:准备一个数组对象,里面包含详细信息(素材包含)
②:获取元素
③:设置定时器函数
        设置一个变量++
        找到变量对应的对象
        更改图片、文字信息
        激活小圆点:移除上一个高亮的类名,当前变量对应的小圆点添加类
④:处理图片自动复原从头播放(放到变量++后面,紧挨)
        如果图片播放到最后一张, 就是大于等于数组的长度
        则把变量重置为0
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>轮播图点击切换</title><style>* {box-sizing: border-box;}.slider {width: 560px;height: 400px;overflow: hidden;}.slider-wrapper {width: 100%;height: 320px;}.slider-wrapper img {width: 100%;height: 100%;display: block;}.slider-footer {height: 80px;background-color: rgb(100, 67, 68);padding: 12px 12px 0 12px;position: relative;}.slider-footer .toggle {position: absolute;right: 0;top: 12px;display: flex;}.slider-footer .toggle button {margin-right: 12px;width: 28px;height: 28px;appearance: none;border: none;background: rgba(255, 255, 255, 0.1);color: #fff;border-radius: 4px;cursor: pointer;}.slider-footer .toggle button:hover {background: rgba(255, 255, 255, 0.2);}.slider-footer p {margin: 0;color: #fff;font-size: 18px;margin-bottom: 10px;}.slider-indicator {margin: 0;padding: 0;list-style: none;display: flex;align-items: center;}.slider-indicator li {width: 8px;height: 8px;margin: 4px;border-radius: 50%;background: #fff;opacity: 0.4;cursor: pointer;}.slider-indicator li.active {width: 12px;height: 12px;opacity: 1;}</style>
</head><body><div class="slider"><div class="slider-wrapper"><img src="./images/slider01.jpg" alt="" /></div><div class="slider-footer"><p>对人类来说会不会太超前了?</p><ul class="slider-indicator"><li class="active"></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><div class="toggle"><button class="prev">&lt;</button><button class="next">&gt;</button></div></div></div><script>// 1. 初始数据const sliderData = [{ url: './images/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },{ url: './images/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },{ url: './images/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },{ url: './images/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },{ url: './images/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },{ url: './images/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },{ url: './images/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },{ url: './images/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },]//1.获取元素const img = document.querySelector('.slider-wrapper img')const p = document.querySelector('.slider-footer p')const footer = document.querySelector('.slider-footer')let i = 0setInterval(function () {let n = i % sliderData.lengthimg.src = sliderData[n].urlp.innerHTML = sliderData[n].titlefooter.style.backgroundColor = sliderData[n].colordocument.querySelector(`.slider-indicator .active`).classList.remove('active')document.querySelector(`.slider-indicator li:nth-child(${n + 1})`).classList.add('active')i++}, 1000)</script>
</body></html>

核心代码: 

总结不易~本章节对我有很大所获,希望对你也是!!!!

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

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

相关文章

新版AndroidStudio通过系统快捷创建带BottomNavigationView的项目踩坑记录

选择上面这个玩意创建的项目 坑点1 &#xff1a;配置的写法和不一样了 镜像的写法&#xff1a; 新的settings.gradle.kts中配置镜像的代码&#xff1a; pluginManagement {repositories {mavenCentral()google {content {includeGroupByRegex("com\\.android.*")…

SAP资产盘盈盘亏的过账处理、入账价值错误调整、资产减值准备

文章目录 一、SAP资产盘盈盘亏处理1、ABNAN盘盈 &#xff08;往年资产&#xff09; ABZON (当年资产&#xff09;2、ABAVN盘亏 二、资产价值入账错了&#xff08;价值多了或少了&#xff09;&#xff0c;怎么调账1、价值少了2、价值多了 三、资产减值准备1、启用重估2、指定间隔…

炸砖块游戏的最终图案

描述 小红正在玩一个“炸砖块”游戏,游戏的规则如下:初始有一个 n * m 的砖块矩阵。小红会炸 k 次,每次会向一个位置投炸弹,如果这个位置有一个砖块,则砖块消失,上方的砖块向下落。小红希望你画出最终砖块的图案。 输入描述 第一行输入三个正整数 n, m, k,代表矩阵的行…

【Python项目】图像信息隐藏技术的实现

【Python项目】图像信息隐藏技术的实现 技术简介&#xff1a;采用Python技术、MYSQL数据库等实现。 系统简介&#xff1a;系统主要的功能有登录模块、对个人信息的维护模块、图片信息的隐藏模块涉及图片的上传和信息的验证。 背景&#xff1a; 在当今时代&#xff0c;信息技术…

游戏市场成果及趋势

2024 年的游戏行业发展情况如何&#xff1f;这是一个既关系到开发商&#xff0c;又关系到玩家的问题&#xff0c;而市场分析师可以为我们揭晓答案。下面&#xff0c;就让我们来看看分析师给出的结论以及他们对未来趋势的预测。 玩家 自 2021 年起&#xff0c;全球平均游戏时间…

【算法学习】——整数划分问题详解(动态规划)

&#x1f9ee;整数划分问题是一个较为常见的算法题&#xff0c;很多问题从整数划分这里出发&#xff0c;进行包装&#xff0c;形成新的题目&#xff0c;所以完全理解整数划分的解决思路对于之后的进一步学习算法是很有帮助的。 「整数划分」通常使用「动态规划」解决&#xff0…

深入理解计算机系统阅读笔记-第十二章

第12章 网络编程 12.1 客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型的。根据这个模型&#xff0c;一个应用时由一个服务器进程和一个或者多个客户端进程组成。服务器管理某种资源&#xff0c;并且通过操作这种资源来为它的客户端提供某种服务。例如&#xf…

Redis 实战篇 ——《黑马点评》(中)

《引言》 &#xff08;中&#xff09;篇将接着记录 Redis 实战篇 ——《黑马点评》&#xff08;上&#xff09;篇之后的学习内容与笔记&#xff0c;希望大家能够点赞、收藏支持一下 ᕦ(&#xff65;ㅂ&#xff65;)ᕤ&#xff0c;谢谢大家。 传送门&#xff08;上&#xff09;&…

【2024年华为OD机试】(A卷,100分)- 猜字谜(Java JS PythonC/C++)

一、问题描述 小王设计了一个简单的猜字谜游戏&#xff0c;游戏的谜面是一个错误的单词&#xff0c;比如 nesw&#xff0c;玩家需要猜出谜底库中正确的单词。猜中的要求如下&#xff1a; 对于某个谜面和谜底单词&#xff0c;满足下面任一条件都表示猜中&#xff1a; 变换顺序…

ip属地是根据手机号还是位置

在数字化时代&#xff0c;IP地址作为网络世界中的“门牌号”&#xff0c;其属地信息往往与用户的地理位置紧密相关。然而&#xff0c;关于IP属地是如何确定的&#xff0c;是否依赖于手机号还是实际位置&#xff0c;这一话题时常引发讨论。本文将深入探讨IP属地的确定方式&#…

nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控

我们可以详细地配置 Nginx 来实现正向代理、反向代理、SSL、负载均衡和虚拟域名。同时&#xff0c;我会介绍如何使用一些中间件来监控 Nginx 的状态和性能。 1. 安装 Nginx 如果你还没有安装 Nginx&#xff0c;可以通过以下命令进行安装&#xff08;以 Ubuntu 为例&#xff0…

React性能优化: 使用React.lazy与Suspense提高加载效率

## 1. React.lazy与Suspense简介 在开发React应用程序时&#xff0c;我们经常会遇到需要加载大型组件或者数据的情况。为了提高页面加载的效率&#xff0c;React引入了React.lazy和Suspense这两个特性。 什么是React.lazy&#xff1f; 是React 16.6版本引入的新特性&#xff0c…

Golang笔记——Interface类型

大家好&#xff0c;这里是Good Note&#xff0c;关注 公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Golang的interface数据结构类型&#xff0c;包括基本实现和使用等。 文章目录 Go 语言中的 interface 详解接口定义实现接口空接口 interface{}示…

轨迹优化 | 基于贝塞尔曲线的无约束路径平滑与粗轨迹生成(附ROS C++/Python仿真)

目录 0 专栏介绍1 从路径到轨迹2 基于贝塞尔曲线的粗轨迹生成2.1 路径关键点提取2.2 路径点航向角计算2.3 贝塞尔曲线轨迹生成 3 算法仿真3.1 ROS C仿真3.2 Python仿真 0 专栏介绍 &#x1f525;课设、毕设、创新竞赛必备&#xff01;&#x1f525;本专栏涉及更高阶的运动规划…

理解STC15F2K60S2单片机的最小电路

一、STC15F2K60S2与51单片机的区别 STC15F2K60S2和51单片机虽然都基于8051内核&#xff0c;但在多个方面存在显著区别&#xff1a; 1. CPU性能&#xff1a; - STC15F2K60S2&#xff1a;采用增强型8051 CPU&#xff0c;1T单时钟/机器周期&#xff0c;速度比普通8051快8-12倍…

VSCode 搜索 搜不到

VSCode 搜索 搜不到 今天打开一个新的工作目录之后 ctrl P 搜文件 搜不到 经观察后发现 当我搜索时候&#xff0c; 右侧搜索按钮有一个时钟标识&#xff0c;疑似 搜索的范围 是最近打开内容。 经过和全局搜索的编辑器对比设置后发现&#xff0c;把设置中 下图中 选项去掉勾选…

软件测试 —— Selenium常用函数

软件测试 —— Selenium常用函数 操作测试对象点击/提交对象 click()模拟按键输入 send_keys("")清除文本内容 clear() 模拟用户键盘行为 Keys包示例用法 获取文本信息 textget_attribute("属性名称") 获取当前页面标题 title获取当前页面的 url current_u…

Vue 学习之旅:核心技术学习总结与实战案例分享(vue指令下+计算属性+侦听器)

Vue 学习之旅&#xff1a;核心技术学习总结与实战案例分享 文章目录 Vue 学习之旅&#xff1a;核心技术学习总结与实战案例分享一、指令补充&#xff08;一&#xff09;指令修饰符&#xff08;二&#xff09;v-bind 对样式操作的增强&#xff08;三&#xff09;v-model 应用于其…

UE5 打包项目

UE5 打包项目 flyfish 通过 “文件”->“打开项目”&#xff0c;然后在弹出的对话框中选择项目文件&#xff08;通常是以.uproject为后缀的文件&#xff09; 选择目标平台&#xff1a; 在 UE5 主界面中&#xff0c;找到 “平台”&#xff08;Platforms&#xff09;。根据…

1. Doris分布式环境搭建

一. 环境准备 本次测试集群采用3台机器hadoop1、hadoop2、hadoop3, Frontend和Backend部署在同一台机器上&#xff0c;Frontend部署3台组成高可用&#xff0c;Backend部署3个节点&#xff0c;组成3副本存储。 主机IP操作系统FrontendBackendhadoop1192.168.47.128Centos7Foll…