JavaScript基础之BOM与DOM
文章目录
- BOM操作
- window对象
- window的子对象之navigator对象(了解即可)
- window的子对象之screen对象(了解即可)
- window的子对象之history对象(了解即可)
- window的子对象之location对象
- 弹出框
- 警告框
- 确认框
- 提示框
- 记时相关
- setTimeout()
- setInterval()
- DOM操作
- 查找标签
- 直接查找
- 间接查找
- 操作节点
- 事件
- 常见事件
JavaScript分为三个部分:
ECMAScript(核心)、BOM、DOM
,上篇所写的全是ECMAScript知识:https://blog.csdn.net/achen_m/article/details/134161395?spm=1001.2014.3001.5501(没看过上一篇的可以先看上一篇)
这篇主要讲的就是JavaScript下面两个部分的内容:
- BOM(Browser Object Model)是指浏览器对象模型,它使JavaScript有能力与浏览器进行‘对话’
- DOM(Document Object Model)是指文档对象模型,通过它可以访问HTML文档的所有元素
Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()。
BOM操作
window对象
所有浏览器都支持 window 对象。它表示浏览器窗口。
没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。
所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
全局变量是 window 对象的属性。全局函数是 window 对象的方法。
接下来要讲的HTML DOM 的 document 也是 window 对象的属性之一。
语法 | 意义 |
---|---|
window.open() | 打开新窗口 |
window.close() | 关闭当前窗口 |
window.navigator.userAgent() | 获取客户端绝大部分信息 |
window.history.forward() | 前进一页 |
window.history.back() | 后退一页 |
window.location.href | 获取当前URL |
window.location.href = 新网址 | 跳转到指定页面 |
window.location.reload() | 重新加载页面 |
alter() | 警告 |
confirm() | 确认 |
prompt() | 提示 |
一些常用的window方法:
window.innerHeight //浏览器窗口的内部高度(浏览器书签栏底部到控制台顶点的高度距离)window.innerWidth //浏览器窗口的内部宽度(浏览器左侧边框到控制台左侧边框的宽度距离)window.open() //打开新窗口(括号内可以填写真实的网址,也可以不填写,不填写就新开空白页面)window.close() //关闭当前窗口(括号内填写或不填写都是关闭当前窗口)window.open('https://www.baidu.com','','height=400px,width=400px,top=400px,left=400px')解析内容:新建窗口打开页面,第二个参数写空即可,第三个参数写新建窗口的大小和位置
window的子对象之navigator对象(了解即可)
浏览器对象,通过这个对象可以判定用户所使用的浏览器,包含了浏览器相关信息。
navigator.appName //Web浏览器全称navigator.appVersioin //Web浏览器厂商和版本的详细字符串navigator.userAgent //客户端绝大部分信息navigator.platform //浏览器运行所在的操作系统(API)'因为是window的子对象,完整的写法是window.navigator.appName'网址防爬:1.最简单最常用的一个就是校验当前请求的发起者是否是一个浏览器 userAgentuser-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36如何破解该措施?在你的代码中加上上面的user-agent配置即可
window的子对象之screen对象(了解即可)
屏幕对象,不常用。
一些属性:screen.availWidth //可用的屏幕宽度screen.availHeight //可用的屏幕高度
window的子对象之history对象(了解即可)
window.history 对象包含浏览器的历史。
浏览历史对象,包含了用户对当前页面的浏览历史,但我们无法查看具体的地址,可以简单的用来前进或后退一个页面。
history.forward() // 前进一页history.back() // 后退一页
window的子对象之location对象
window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。
常用属性和方法:location.href //获取URL网址location.href="URL" //跳转到指定页面location.reload() //重新加载页面
弹出框
可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。
警告框
警告框经常用于确保用户可以得到某些信息。当警告框出现后,用户需要点击确定按钮才能继续进行操作。
语法:alert('New World!');
确认框
确认框用于使用户可以验证或者接受某些信息。
当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。
如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。
语法:confirm('Are you sure?');
提示框
提示框经常用于提示用户在进入页面前输入某个值。
当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。
语法:prompt('请在下方输入哦!');
记时相关
通过使用 JavaScript,我们可以在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件
setTimeout()
过一段时间之后触发(一次性)
语法:一次性定时关键字:setTimeout()var t = setTimeout("JS语句",毫秒);//第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)取消计时事件clearTimeout();'''setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个setTimeout(),你可以使用这个变量名来指定它。setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如 alertMsg()"。第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)。'''eg:<script>'组合写法(匿名函数)'// 在指定时间之后执行一次相应函数var timer = setTimeout(function(){alert('helloworld!');}, 3000) // 毫秒为单位 3秒之后自动执行fun函数// 取消定时任务 如果你想要清除定时任务 需要提前用变量指代定时任务clearTimeout(timer);'分开写法'function time(){alert('helloworld!');}//指定时间之后执行一次函数var t = setTimeout(time,3000);//取消定时任务clearTimeout(t);</script>
setInterval()
过一段时间之后触发(循环)
语法:循环定时关键字:setInterval()s = setInterval(("JS语句",时间间隔);//第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)//取消计时事件clearInterval(s);'''setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。'''eg:<script> function func(){alert('helloworld!');}function show(){let t = setInterval(func,3000); //每间隔3秒执行一次function inner(){clearInterval(t); //清除定时器}setTimeout(inner,9000); // 9秒后触发执行闭包函数}// 调用函数show();</script>
DOM操作
DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。HTML DOM 模型被构造为对象的树。
HTML DOM树
DOM标准规定HTML文档中的每一个成分都是节点(node):文档节点(document对象):代表整个文档元素节点(element对象):代表一个元素(标签)文本节点(text对象):代表元素(标签)中的文本属性节点(attribute对象):代表一个属性,元素(标签)才有属性注释是注释节点(comment对象)JavaScript可以通过DOM创建动态的HTML:JavaScript能够改变页面中的所有HTML元素JavaScript能够改变页面中的所有HTML属性JavaScript能够改变页面中的所有CSS样式JavaScript能够对页面中的所有事件做出反应
查找标签
直接查找
DOM (Document Object Model)是指文档对象模型,通过它可以访问HTML文档的所有元素,既然DOM操作是通过js代码来操作标签 所以我们需要先学习如何查找标签之后才能给标签绑定一些JS代码(DOM操作)
在JavaScript内,我们可以通过多种方式可以查找到我们想要操作的标签
'''1.js中变量名的命名风格推荐使用驼峰体2.js代码查找到的标签如果需要反复使用可以用变量接收'''document.getElementById('标签的id值');根据id值查找标签,结果直接是标签对象本身document.getElementsByClassName('标签的class值');根据class值查找标签,结果是数组类型'document.getElementsByTagName('标签名');根据标签名查找标签,结果是数组类型'还可以通过标签名加索引值查找相同标签中的第一个标签'document.getElementsByTagName('标签名')[索引值];document.getElementsByName('name属性值');'通过id找的话,只能找到一个标签,因为id在html中是唯一的'注意:以getElements的方式查找标签,可能灰找到多个标签,并且是以数组的形式反馈给我们
首先在页面内创建几个标签
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>DOM-test</title></head>
<body><div id="contents">具有id</div><div class="box">具有box类</div><div class="box">具有box类</div><span>span1</span><span>span2</span><br />male: <input type="radio" name="gender">female: <input type="radio" name="gender">
</body>
</html>
创建好了标签后,此时我们通过上面所介绍的标签查找方式,来找到我们创建的标签:
通过id值查找
通过class值查找
这里我们可以发现,找到的标签被放入了数组内,取出来的方式也很简单
因为是多个标签,我们先将它放入了一个变量保存起来,那么我们需要哪个标签就通过数组取值方式就可以找到对应标签了
通过标签名查找
通过name属性来查找
间接查找
parentElement //父节点标签元素children //所有子标签元素firstElementchild //第一个子标签元素lastElementchild //最后一个子标签元素nextElementSibling //下一个兄弟标签元素previousElementSibling //上一个兄弟标签元素
操作节点
节点操作1.js代码创建一个标签let xxx = document.createElement('标签名');2.添加节点xxx.appendchild(新标签名1); //添加在后面的节点xxx.insertBefore(新标签名1,某个节点); //添加在某个节点后面3.删除节点xxx.removeChild(要删除的节点);4.替换节点xxx.replaceChild(新标签名1,某一个节点);5.属性节点//获取文本节点的值var xxx = document.getElementById('标签的id值');xxx.innerTextxxx.innerHTML//设置文本节点的值var xxx = document.getElementById('标签的id值');xxx.innerText="1";xxx.innerHTML="<p>2</p>";//attribute操作var xxx = document.getElementById('标签的id值');xxx.setAttribute('name','jack'); //兼容默认属性和自定义属性xxx.getAttribute('name');xxx.removeAttribute('name');//自带的属性还可以直接句点符号(.)属性名来获取和设置xxx.src='...';
innerText与innerHTML的区别
.innerText //获取标签内部所有的文本内容.innerText='文本'; //替换/设置标签内部的文本(不识别标签语法).innerHTML //获取标签内部所有的标签包含文本.innerHTML='文本'; //替换/设置内部的文本(识别标签语法)
获取值的操作
1.针对用户输入和用户选择的标签标签对象.value2.针对用户上传的文件数据(需要索引取值)标签对象.files fileList [文件对象、文件对象、文件对象]标签对象.files[0] 文件对象注意:点value无法获取到文件数据(错误取值),获取的是文件路径,要加上索引值eg:fileEle.value'C\dosktop\\dds\as.doc
class与css操作
1.js操作标签css样式标签对象.style.属性名(-没有 变成驼峰体)标签对象.style.color = 'red'; //字体颜色标签对象.style.fontSize = '30px'; //字体大小标签对象.style.backgroundColor = 'lightblue'; //背景颜色.....2.js操作标签class属性标签对象.classList //获取标签素有的类属性标签对象.classList.add('content'); //添加类标签对象.classList.contains(); //验证是否包含某一个类属性true/false标签对象.classList.remove(); //移除某一个类属性标签对象.classList.toggle(); //有则删除无则添加 有则返回true
现在我们可以用之前在页面创建的好的标签页面来试试
增加样式
通过找到对应的标签后,对改标签增加css样式
当我们的样式为连续性时,如:
background-color;
这个是css内表示,中间如果有-
话,在JS里面将会去掉,并且在后面的单词变为首字母大写:backgroundColor
标签增加属性与移除属性
JS实现方式如下:
标签元素.setAttribute('属性名','属性值');标签元素.removeAttribute('属性名');
setAttribute当元素存在属性时,则修改,当元素不存在时,则增加
使用removeAttribute删除属性
创建html元素
我们创建html元素的方式有多种,先介绍第一种:
var div = document.createElement('标签名');
新创建的元素需要插入到某一个元素下面,介绍两种插入方式:
追加一个子节点(放到最后)somenode.appendChild(新的子节点);插入一个子节点(插入到某一个节点前)somenode.insertBefore(新的子节点,某个节点);
在次强调:在JS内获取到的HTML元素也可以称为节点
那么也可以删除某个节点
somenode.removeChild(要删除的子节点);somenode.replaceChild(新的子节点,某个子节点); 将某个节点替换
当然,如果想要我们创建的节点存放到某个位置,我们必须要先获取其父节点,还有获取插入位置的那一个节点
获取父节点下面的所有子节点
第二种创建HTML元素的方式:
其实我们在上面也讲过一种,不过那种是直接输出到body内的,而我们这个可以指定输出到某个节点下面。
注意:这样创建会有一个很大的弊端,那就是会替换掉我们节点下面的所以内容
获取值
获取某个标签的文本值
获取表单控件值
class操作
var div = document.getElementById('contents');div.classList.remove('box'); 移除类名boxdiv.classList.add('box'); 添加类名boxdiv.classList.contains('box'); 判断box类名是否存在div.classList.toggle('box');判断box类名是否存在:不存在则添加、存在则移除
效果展示:
事件
HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时执行一段JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。
简单理解就是通过js代码给html标签绑定一些自定义的功能
常见事件
onclick 当用户点击某个对象时调用的事件句柄
onfocus 元素获得焦点 // 练习:输入框
onblur 元素失去焦点 //应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证
onchange 域的内容被改变 //应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)......补充知识:
ondblclick 当用户双击某个对象时调用的事件句柄。
onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress 某个键盘按键被按下并松开。
onkeyup 某个键盘按键被松开。
onload 一张页面或一幅图像完成加载。
onmousedown 鼠标按钮被按下。
onmousemove 鼠标被移动。
onmouseout 鼠标从某元素移开。
onmouseover 鼠标移到某元素之上。
onselect 在文本框中的文本被选中时发生。
onsubmit 确认按钮被点击,使用的对象是form。
事件需要与HTML元素进行绑定,绑定的位置可以在元素的属性栏内,也可以在JavaScript内:
绑定事件的两种方式:绑定方式1:标签内部指定点击的时候运行<input type="button" value="点我" onclick="alert('helloworld!')"> 绑定方式2: 先查询到标签 然后绑定使用 可以批量绑定<button id="but">点点看</button><script>let but = document.getElementById('but')but.onclick=function(){alert('点你个傻der啊!') //触发匿名函数,因为我们需要执行的可能是很多js代码}</script>
事件中的关键字this
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>DOM</title>
</head>
<body><input type="button" value="点击me" onclick="alert('helloworld!')"> <!--绑定方式1:标签内部指定点击的时候运行--><button id="but">点点看</button><script>// 绑定方式2:先查询到标签,然后绑定使用,可以批量绑定let but = document.getElementById('but');but.onclick=function(){alert('点你个傻der啊!') //触发匿名函数,因为我们需要执行的可能是很多js代码console.log(this);}</script>
</body>
</html>
window.load()
注意事项:之前script是说是写在head标签里面的,为什么现在都是写在body标签最下面呢?
因为在HTML中是从上往下依次执行的,如果JavaScript的代码写在head标签里面会先执行,这样还没有body标签中的代码执行JavaScript代码就没有数据,就会报错。
当然有另一种方法可以让JavaScript的代码写在head标签中,且还让代码最后执行
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>window.onload = function(){//页面js代码 文档加载完毕后执行的代码}</script></head><body></body></html>
相关文章:

JavaScript基础之BOM与DOM
文章目录 BOM操作window对象window的子对象之navigator对象(了解即可)window的子对象之screen对象(了解即可)window的子对象之history对象(了解即可)window的子对象之location对象 弹出框警告框确认框提示框…...

【Linux学习笔记】进程概念(中)
1. 操作系统的进程状态2. Linux操作系统的进程状态3. 僵尸进程4. 孤儿进程5. 进程优先级5.1. 优先级是什么和为什么要有优先级5.2. Linux中的进程优先级 6. 进程切换7. 环境变量7.1. 环境变量的认识7.2. 环境变量相关的命令7.3. 环境变量和本地变量7.4. 命令行参数7.5. 获取环境…...

scanpy赋值问题
今天发现一个很奇怪的bug import numpy as np import pandas as pd import anndata as ad from scipy.sparse import csr_matrix print(ad.__version__)counts csr_matrix(np.random.poisson(1, size(100, 2000)), dtypenp.float32) adata1 ad.AnnData(counts) print(adata1)…...

腾讯云域名备案后,如何解析到华为云服务器Linux宝塔面板
一、购买域名并且进行备案和解析,正常情况下,购买完域名,如果找不到去哪备案,可以在腾讯云上搜索“备案”关键词就会出现了,所以这里不做详细介绍,直接进行步骤提示: 二、申请ssl证书࿰…...
odoo 按钮打印pdf报表
odoo打印一般是在动作里面进行的 所以此方法可用自定义按钮进行打印 <template id"report_sale_line_packing_template"> xxx </template><template id"report_sale_line_packing"><t t-call"web.basic_layout"><t …...

用逻辑分析仪观察串口Uart数据波形
一、概述 只讨论嵌入式编程中较为常用的异步串行接口(Universal Asynchronous Receiver/Transmitter, UART),TTL电平。 串口的参数一般有: 1.波特率,数据传输速率,单位bps(bits per…...
数据结构-栈应用括号匹配
1、顺序栈的定义 2、顺序栈的入栈,出栈,取出栈顶元素,匹配判断函数 3、顺序栈的运行测试 4、实现代码 #include<iostream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; #define M…...
leetcode做题笔记209. 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入&#…...

【机器学习】几种常用的机器学习调参方法
在机器学习中,模型的性能往往受到模型的超参数、数据的质量、特征选择等因素影响。其中,模型的超参数调整是模型优化中最重要的环节之一。超参数(Hyperparameters)在机器学习算法中需要人为设定,它们不能直接从训练数据…...

使用免费 FlaskAPI 部署 YOLOv8
目标检测和实例分割是计算机视觉中关键的任务,使计算机能够在图像和视频中识别和定位物体。YOLOv8是一种先进的、实时的目标检测系统,因其速度和准确性而备受欢迎。 Flask是一个轻量级的Python Web框架,简化了Web应用程序的开发。通过结合Fla…...

不使用屏幕在树莓派4B安装Ubuntu22.04桌面版(64位)
因为时间有限只说一下基本路径: 1首先安装Ubuntu22.04server版本 2设置服务器版本的SSH和WiFi 3通过服务器版本安装Ubuntu-desktop升级到Ubuntu22.04桌面版 4在桌面版上安装远程控制软件:xrdp; 5使用Windows自带的远程桌面连接访问Ubuntu 6完成...

Pymysql模块使用操作
一、pymysql模块安装 二、测试数据库连接 测试数据库连接.py from pymysql import Connectioncon None try:# 创建数据库连接con Connection(host"localhost",port3306,user"root",password"XXXXX")# 测试链接print(con.get_host_info())print…...

8+双疾病+WGCNA+多机器学习筛选疾病的共同靶点并验证表达
今天给同学们分享一篇双疾病WGCNA多机器学习的生信文章“Shared diagnostic genes and potential mechanism between PCOS and recurrent implantation failure revealed by integrated transcriptomic analysis and machine learning”,这篇文章于2023年5月16日发表…...
springboot如何获取前端请求头的值并加入ThreadLocal
依赖: <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version> </dependency>示例: public class ThreadLocalUtil {private static ThreadLoc…...

程序员想要网上接单却看花了眼?那这几个平台你可得收藏好了!
现在经济压力这么大,但是生活成本还在上升,相信大家都知道“四脚吞金兽”的威力了吧!话虽如此,但是生活总得继续,为了家庭的和谐幸福,为了孩子的未来,不少人选择多干几份工作,赚点外…...
前端食堂技术周刊第 102 期:Next.js 14、Yarn 4.0、State of HTML、SEO 从 0 到 1
美味值:🌟🌟🌟🌟🌟 口味:肥牛宽粉 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 大家好,我是童欧巴。欢迎来到前端食堂技术周刊,我们先来看下…...

GPT与人类共生:解析AI助手的兴起
随着GPT模型的崭新应用,如百度的1和CSDN的2,以及AI助手的普及,人们开始讨论AI对就业市场和互联网公司的潜在影响。本文将探讨GPT和AI助手的共生关系,以及我们如何使用它们,以及使用的平台和动机。 GPT和AI助手…...

HTML脚本、字符实体、URL
HTML脚本: JavaScript 使 HTML 页面具有更强的动态和交互性。 <script> 标签用于定义客户端脚本,比如 JavaScript。<script> 元素既可包含脚本语句,也可通过 src 属性指向外部脚本文件。 JavaScript 最常用于图片操作、表单验…...
UOS安装Jenkins
一,环境准备 1.安装jdk 直接使用命令行(sudo apt install -y openjdk-11-jdk)安装jdk11 2.安装maven 参考此篇文章即可 UOS安装并配置Maven工具_uos 安装maven_蓝天下的一员的博客-CSDN博客 不过要注意这篇文章有个小错误,我…...
纯CSS实现卡片上绘制透明圆孔
<template><div class"dot-card-wrapper"><div class"top-wrapper"><slot name"top"></slot></div><!-->核心是下面这部分</--><div class"dot-row"><div class"left-…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...