javaScript交互补充

1、元素的三大系列

1.1、offset系列

1.1.1、offset初相识

使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等
●获得元素距离带有定位祖先元素的位置
●获得元素自身的大小(宽度高度)
●注意:返回的数值都不带单位
offset系列常用属性

offset系列属性

作用

element.offsetParent

返回作为该元素带有定位的父级元素,如果父级没有定位,则返回body

element.offsetTop

返回元素相对于有定位父元素上方的偏移量

element.offsetLeft

返回元素相对于有定位父元素左方的偏移量

element.offsetWidth

返回自身包括padding、边框、内容区的宽度、返回数值不带单位

element.offsetHeight

返回自身包括padding、边框、内容区的高度、返回数值不带单位

1.1.2、offset与style区别

offset

style

offset可以得到任意样式表中的样式值(行内,内部)

style只能得到行内样式表中的样式值

offset系列获得的数值时没有单位的

style.width获得的是带有单位的字符串

offsetWidth包含padding+border+width

style.width获得不包含padding和border的值

offsetWidth等属性时只读属性,只能获取不能赋值

style.width是可读写属性,可以获取也可以赋值

我们想要获取元素大小为止,用offset更合适

要给元素更改值,则需要用style改变

1.2、client系列

1.2.1、client初相

使用client系列的相关属性来获取元素可视区的相关信息,可以动态的得到该元素的边框大小,元素大小等

client系列属性

作用

element.clientTop

返回元素上边框的大小

element.clientLeft

返回元素左边框的大小

element.clientWidth

返回自身包括padding,内容区宽度,不含边框,返回数值不带单位

element.clientHeight

返回自身包括padding,内容区高度,不含边框,返回数值不带单位

·····<style>* {margin: 0;padding: 0;}.box {width: 200px;height: 200px;border: 1px solid red;margin: 50px auto;position: relative;}.box1 {width: 100px;height: 100px;background-color: orange;position: absolute;top: 0;bottom: 0;left: 0;right: 0;margin: auto;}</style></head><body><div class="box"><div class="box1"></div></div><div class="box2" style="width: 50px; height: 50px; background-color: red; border: 10px solid green"></div><script>var box = document.querySelector(".box");var box1 = document.querySelector(".box1");var box2 = document.querySelector(".box2");// 一、 通过offset获取值// 1、获取该元素带有定位的父级元素,如果父级没有定位,则返回body// console.log(box1.offsetParent, "offsetParent");// 2、返回元素相对于定位父元素上方的偏移量// console.log(box1.offsetTop, "offsetTop");// 3、返回元素相对于定位父元素左方的偏移量// console.log(box1.offsetLeft, "offsetLeft");// 4、返回自身的宽度(包括内容区,边框,padding)// console.log(box.offsetWidth, "offsetWidth");// 5、返回自身的高度(包括内容区,边框,padding)// console.log(box.offsetHeight, "offsetHeight");// 二、通过style获取值// 1、style只能获取行内样式表中的样式值// 不包括padding和border// console.log(box2.style.width); //50px//2、 可读可写// box2.style.width = "200px";</script>
·····
  <head><meta charset="UTF-8" /><title>client</title><style>.box {width: 100px;height: 100px;background-color: red;border: 10px solid orange;padding: 20px;margin: 100px auto;}</style></head><body><div class="box"></div><script>var box = document.querySelector(".box");// 1、返回元素上边框大小//console.log(box.clientTop); //10// 2、返回元素左边框大小//console.log(box.clientLeft); //10// 3、返回自身的宽度,包括padding,内容区,不含边框// console.log(box.clientWidth); //140// 3、返回自身的高度,包括padding,内容区,不含边框// console.log(box.clientHeight); //140</script></body>

1.2.2、client的应用-flexible.js解析

// 立即执行函数   传入window,document参数
(function flexible(window, document) {// 获取html根标签  我们是通过更改html根标签的大小来改变页面大小的var docEl = document.documentElement;// 获取物理像素比,window.devicePixelRatio获取当前的dpr值,如果没有就是1var dpr = window.devicePixelRatio || 1;// adjust body font size//设置body字体大小function setBodyFontSize() {// 如果页面中有body这个元素,就设置body的字体大小if (document.body) {document.body.style.fontSize = 12 * dpr + "px";} else {// 如果页面中没有body这个元素,则等着我们页面主要dom元素加载完后,设置页面字体大小document.addEventListener("DOMContentLoaded", setBodyFontSize);}}setBodyFontSize();// set 1rem = viewWidth / 10// 设置html元素的文字大小function setRemUnit() {// 将页面的大小平均划分为10等份,为整个页面的大小// 设置html根字体大小的变化var rem = docEl.clientWidth / 10;docEl.style.fontSize = rem + "px";}setRemUnit();// reset rem unit on page resize// 如果页面尺寸大小发生了变化,要重新设置rem大小window.addEventListener("resize", setRemUnit);// pageshow  是我们重新加载页面触发的事件window.addEventListener("pageshow", function (e) {//  如果是从缓存取过来的页面,也需要重新计算rem大小,为了兼容浏览器的if (e.persisted) {setRemUnit();}});// detect 0.5px supports// 有些移动端浏览器不支持0.5像素的写法, 通过一下代码,进行兼容if (dpr >= 2) {// 创建一个假的body元素,用于临时添加测试元素以检测某些样式效果var fakeBody = document.createElement("body");// 创建一个测试用的div元素var testElement = document.createElement("div");// 设置测试元素的边框样式,目的是检测在当前环境下边框的实际渲染高度testElement.style.border = ".5px solid transparent";// 将测试元素添加到假body中fakeBody.appendChild(testElement);// 将假body添加到文档的body元素中,以便在当前页面环境中渲染测试元素docEl.appendChild(fakeBody);// 检测测试元素的渲染高度是否为1,这可以用来判断设备的像素比或浏览器的渲染特性if (testElement.offsetHeight === 1) {// 如果测试元素的高度为1,表明可能存在高像素比屏幕或其他渲染特性// 在这种情况下,为docEl添加类名"hairlines",以便通过CSS提供更合适的样式docEl.classList.add("hairlines");}// 清理测试元素,移除假body,以避免对页面其他部分造成潜在影响docEl.removeChild(fakeBody);}
})(window, document);

1.3、scroll系列

1.3.1、 scroll初相识

利用scroll系列的相关属性可以动态的得到该元素的大小,滚动距离等

scroll系列属性

作用

element.scrollTop

返回被卷去的上侧距离,返回数值不带单位

element.scrollLeft

返回被卷去的左侧距离,返回数值不带单位

element.scrollWidth

返回自身实际的宽度(实际内容的宽度),不含边框,返回数值不带单位

element.scrollHeight

返回自身实际的高度(实际内容的宽度),不含边框,返回数值不带单位

image.png

  <head><meta charset="UTF-8" /><title>scroll</title><style>.box1 {width: 200px;height: 200px;background-color: #bfa;border: 10px solid red;padding: 20px;overflow: auto;}p {width: 400px;height: 400px;background-color: orange;}</style></head><body><div class="box1"><p>其那了,种法苟反作。</p></div><script>var box = document.querySelector(".box1");// 1、返回自身实际的宽度(实际内容的宽度),不含边框,返回数值不带单位// console.log("scrollWidth", box.scrollWidth);// console.log("clientWidth", box.clientWidth);// 2、返回自身实际的高度(实际内容的宽度),不含边框,返回数值不带单位// console.log("scrollHeight", box.scrollHeight);// console.log("clientHeight", box.clientHeight);// 3、返回被卷去的上侧距离,返回数值不带单位// console.log("scrollTop", box.scrollTop);// 4、返回被卷去的左侧距离,返回数值不带单位// console.log("scrollLeft", box.scrollLeft);// 滚动事件触发时,打印被卷去的距离// box.addEventListener("scroll", function () {//   console.log("scrollTop", box.scrollTop);//   console.log("scrollLeft", box.scrollLeft);// });</script></body>

1.4、小结

三大系列大小对比

作用

element.offsetWidth

返回自身包括padding,边框,内容区的宽度,返回数值不带单位

element.clientWidth

返回自身包括padding,内容区宽度,不含边框,返回数值不带单位

element.scrollWidth

返回自身实际宽度,不含边框,返回数值不带单位

offset系列进行用于获得元素位置 offsetLeft offsetTop

client经常用于获取元素大小 clientWidth clientHeight

sroll经常用于获取滚动距离 scrollTop

事件对象的相关大小:

2、动画函数封装

2.1、简单动画实现

核心原理:通过定时器setInterval()不断移动盒子位置

实现步骤:

  • 获得盒子当前位置、

  • 让盒子在当前位置上加上1个移动距离、

  • 利用定时器不断重复这个操作、

  • 加一个结束定时器的条件

  • 需要给元素加定位,利用left值变化改变元素的位置

    <!-- 需求:小盒子从左向右移动,移动到500px的地方,停下 -->
<script>var box = document.querySelector("div");var timer = setInterval(function () {if (box.offsetLeft === 500) {clearInterval(timer);return;}box.style.left = box.offsetLeft + 10 + "px";}, 30);</script>

2.2、简单动画函数封装

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>02.封装简单动画函数</title><style>* {margin: 0;padding: 0;}div {width: 100px;height: 100px;background-color: #bfa;position: relative;left: 0;}span {background-color: pink;position: relative;left: 0;}</style></head><body><div>动画1</div><span>动画2</span><!-- 封装函数,传入不同的对象,目标停止值,都可以调用动画 --><script>function animation(obj, target) {var timer = setInterval(function () {if (obj.offsetLeft === target) {clearInterval(timer);return;}obj.style.left = obj.offsetLeft + 10 + "px";}, 30);}var box = document.querySelector("div");var s1 = document.querySelector("span");animation(box, 500);animation(s1, 300);</script></body>
</html>

2.3、优化动画函数

动画函数给不同的元素记录不同定时器

如果多个元素都使用这个动画函数,每次都要var 声明定时器,我们可以给不同元素使用不同的定时器(自己用自己的定时器)

核心原理:利用js是一门动态语言,可以很方便的给当前对象添加属性

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>03.优化动画函数</title><style>* {padding: 0;margin: 0;}div {width: 100px;height: 100px;background-color: #bfa;position: relative;left: 0;}span {background-color: pink;position: relative;left: 0;}</style></head><body><div>动画1</div><br /><button>点击按钮,执行动画函数</button><br /><span>动画2</span><!-- 优化1:根据传入的不同对象,将timer作为属性添加给不同的对象,减少开辟的空间 --><!-- 优化2:保证只有一个定时器在执行 --><script>function animation(obj, target) {//在开启动画前,先关闭前一个定时器,保证只有一个定时器在执行clearInterval(obj.timer);obj.timer = setInterval(function () {if (obj.offsetLeft >= target) {clearInterval(obj.timer);//优化3:当达到目标值后,再点击也不会执行了return;}obj.style.left = obj.offsetLeft + 10 + "px";}, 30);}var box = document.querySelector("div");var s1 = document.querySelector("span");var btn = document.querySelector("button");btn.addEventListener("click", function () {animation(s1, 300);});animation(box, 500);</script></body>
</html>

2.4、缓动效果原理

缓动动画就是让元素运动速度有所变化,最常见的是让速度慢慢停下来

思路:

让盒子每次移动的距离慢慢变小,速度就会慢慢落下来

核心算法:(目标值-现在的位置)/10 作为每次移动的距离步长

停止的条件是:让当前盒子位置等于目标位置就停止定时器

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>04.缓动画实现</title><style>* {padding: 0;margin: 0;}div {width: 100px;height: 100px;background-color: pink;position: relative;left: 0;}</style></head><body><button>点击按钮,执行动画函数</button><br /><div>动画2</div><script>function animation(obj, target) {clearInterval(obj.timer);obj.timer = setInterval(function () {// 定义step,来代表每次移动的距离值,(目标值-现在的位置)/10var step = (target - obj.offsetLeft) / 10;if (obj.offsetLeft == target) {clearInterval(obj.timer);return;}obj.style.left = obj.offsetLeft + step + "px";}, 30);}var s1 = document.querySelector("div");var btn = document.querySelector("button");btn.addEventListener("click", function () {animation(s1, 500);});</script></body>
</html>

2.5、动画函数优化

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>05.优化缓动动画动画函数</title><style>* {padding: 0;margin: 0;}div {width: 100px;height: 100px;background-color: pink;position: absolute;left: 0;}</style></head><body><button id="btn01">点击按钮,执行动画函数 500</button><br /><button id="btn02">点击按钮,执行动画函数 800</button><br /><div>丹洋其</div><script>//优化三  加回调函数,可以在执行动画后,再执行其他内容function animation(obj, target, callback) {clearInterval(obj.timer);obj.timer = setInterval(function () {// 定义step,来代表每次移动的距离值// 优化一:对于step会涉及到小数,将小数向上取整// var step = Math.ceil((target - obj.offsetLeft) / 10);// 优化二:动画还是会涉及到往回走,如果往回走,则step会是负值,要向小取整var step = (target - obj.offsetLeft) / 10;step = step > 0 ? Math.ceil(step) : Math.floor(step);if (obj.offsetLeft == target) {clearInterval(obj.timer);// 如果传入了回调,则执行回调,否则,就不执行if (callback) {callback();}} else {// console.log(222);obj.style.left = obj.offsetLeft + step + "px";}}, 15);}var s1 = document.querySelector("div");var btn01 = document.querySelector("#btn01");var btn02 = document.querySelector("#btn02");btn01.addEventListener("click", function () {animation(s1, 500);});btn02.addEventListener("click", function () {animation(s1, 800, function () {alert("111");});});</script></body>
</html>

2.6、animation.js文件并使用

animation.js

function animation(obj, target, callback) {clearInterval(obj.timer);obj.timer = setInterval(function () {var step = (target - obj.offsetLeft) / 10;step = step > 0 ? Math.ceil(step) : Math.floor(step);if (obj.offsetLeft == target) {clearInterval(obj.timer);if (callback) {callback();}} else {console.log(222);obj.style.left = obj.offsetLeft + step + "px";}}, 15);
}

简单使用

image.png

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Document</title><style>.nav {width: 30px;height: 30px;background-color: blueviolet;position: fixed;text-align: center;line-height: 30px;right: 0px;top: 40%;}.con {position: absolute;left: 0px;top: 0;width: 200px;height: 30px;background-color: blueviolet;z-index: -1;}</style><script src="./animation.js"></script></head><body><div class="nav"><span>⬅️</span><div class="con">移入弹出</div></div><script>var s1 = document.querySelector("span");var nav = document.querySelector(".nav");var con = document.querySelector(".con");nav.addEventListener("mouseenter", function () {animation(con, -170, function () {s1.innerHTML = "➡️";});});nav.addEventListener("mouseleave", function () {animation(con, 0, function () {s1.innerHTML = "⬅️";});});</script></body>
</html>

3、JSON数据

3.1、JSON

(1)、定义:

JSON数据格式 JavaScript Object Notation缩写 即 js对象表示法

由于JS中的对象只有JS自己认识,其他的语言都不认识,所以引入了JSON,JSON就是一个特殊格式的字符串,这个字符串可以被任意的语言所识别,

并且可以转换为任意语言中的对象,JSON在开发中主要用来数据的交互,是一种轻量级的数据交换格式

(2)、特点:

1、易于程序员阅读和编写。

2、易于计算机解析和生成。

3、其实是javascript的子集:原生javascript支持JSON

(3)、作用:

json是一种与语言无关的数据交换的格式,

1、使用ajax进行前后台数据交换

2、移动端与服务端的数据交换

(4)、JSON的语法规则:

JSON的语法规则十分简单,可称得上“优雅完美”,总结起来有:

JSON有两种结构:

1、对象格式:{“key1”:obj1, “key2”:obj2, “key3”:obj3…}

2、数组/集合格式: [obj1,obj2,obj3…]

JSON中允许的值:字符串,数值,布尔值,null,对象,数组

JSON和JS对象的格式一样,只不过JSON字符串中的属性名必须加双引号,其他的和JS语法一致

规则如下:

1)映射用冒号(“:”)表示。名称:值

2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2

3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}

4) 并列数据的集合(数组)用方括号(“[]”)表示。

(5)、JSON的方法

将JSON字符串转换为JS中的对象,在JS中,为我们提供了一个工具类,就叫JSON ,这个对象可以帮助我们将一个JSON转换为JS对象,也可以将一个JS对象转换为JSON

JSON.parse()

可以将以JSON字符串===》js对象

它需要一个JSON字符串作为参数,会将该字符串转换为JS对象并返回

var json = '{"name":"孙悟空","age":18,"gender":"男"}';var o = JSON.parse(json);console.log(o); //{name: '孙悟空', age: 18, gender: '男'}console.log(o.gender); //男

3.2、XML

3.2.1 什么是xml

eXtensible Markup Language,可扩展标记型语言

(1)标记型语言:html是标记型语言,都是使用标签进行操作。

xml里面的操作也是使用标签进行操作。

(2)可扩展:html里面的标签,每个标签有自己特定的含义,

比如<br/> <hr/>

在xml中标签自己定义的,比如 <aa> <猫>

(3)xml的主要的功能是存储数据(不是显示数据)

3.2.2 xml的应用在三个地方

第一,xml用于作为系统之间传输数据的格式

第二,xml用于表示生活中有关系的数据,数据的存储。

第三,xml经常使用在系统的配置文件

第四,android 手机应用程序开发,页面的内容展示,都是xml

3.3、JSON与XML比较

JSON常备拿来与XML做比较,因为JSON的诞生本来就或多或少要有取代XML的意思。

相比XML,JSON的优势如下:

1、没有结束标签,长度更短,读写更快。

2、能够直接被JavaScript解析器解析。

3、可以使用数组。

JSON:

{

“id” : 12,

“name” : “gao”,

“age” : 30,

“gender” : “男”,

“interests” : [“篮球”, “爬山”, “旅游”]

}

XML:

<root><id>12</id><name>gao</name><age>30</age><gender>男</gender><interest>篮球</interest><interest>爬山</interest><interest>旅游</interest>
</root>

JSON可以直接使用数组,但是XML没有直接定义数组,

如果数组很长,我们的代码中就要添加大量的没有实际意义的开始和结束标签,这对于网络传输是不利的。

XML主要是用在配置文件。

4、本地存储

localstorage、Sessionstorage是Web Storage,H5的本地存储机制。是本地存储,存储在客户端,以键/值对的形式存储的,通常以字符串存储。

是针对HTML4中 Cookie 存储机制的一个改善,由于Cookie存储机制有很多缺点,HTML5不再使用它,转而使用改良后的 Web Storage 存储机制。

4.1、Cookie

(1)、定义

Cookie实际上是一小段的文本信息,是服务器发送到用户浏览器并保存在本地的一小块数据。

客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。当浏览器下次向同一服务器再发起请求时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

(2)、作用

保存用户登录状态

跟踪用户行为

定制页面

创建购物车:使用cookie来记录用户需要购买的商品,再结帐的时候可以统一提交。(淘宝网就是使用cookie记录了用户曾经浏览过的商品,方便随时进行比较)

4.2、window.sessionStorage

  • 生命周期为关闭浏览器窗口

  • 在同一个窗口(页面)下数据可以共享

  • 存储空间相对较小

  • 以键值对的形式存储使用

sessionStorage.setItem(key,value); //存储数据

sessionStorage.getItem(key);//获取数据

sessionStorage.removeItem(key);//删除数据

sessionStorage.clear();//清除数据

4.3、window.localStorage

  • 生命周期永久生效,除非手动删除,否则关闭页面也会存在

  • 可以多窗口(页面)共享(同一个浏览器可以共享)

  • 存储空间较大

  • 以健值对的形式存储使用

localStorage.setItem(key,value); //存储数据

localStorage.getItem(key);//获取数据

localStorage.removeItem(key);//删除数据

localStorage.clear();//清除数据

4.4、记住用户名案例

如果勾选记住用户名,下次用户打开浏览器,就在文本框里自动显示上次登录的用户名

 <body><input type="text" id="username" /><input type="checkbox" id="checkbox" />记住用户名<script>var userInt = document.getElementById("username");var checkbox = document.getElementById("checkbox");// 判断本地是否存储了username,存了就取出来赋值给input,并勾选复选框if (localStorage.getItem("username")) {userInt.value = localStorage.getItem("username");checkbox.checked = true;}checkbox.addEventListener("change", function () {if (this.checked) {localStorage.setItem("username", userInt.value);} else {localStorage.removeItem("username");}});</script></body>

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

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

相关文章

【Linux】-学习笔记09

第六章、nfs网络文件系统 1.nfs网络文件系统简介 NFS(Network File system&#xff0c;网络文件系统)是由SUN公司研制的UNIX表示层协议&#xff0c;它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源&#xff0c;主要在unix系列操作系统上使用。…

【C++】LeetCode:LCR 078. 合并 K 个升序链表

题干&#xff1a; 给定一个链表数组&#xff0c;每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 解法&#xff1a;优先队列 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *ne…

minGW安装教程

一、下载 1.通过官网WinGW官网下载 http://www.mingw-w64.org 2.通过SourceForge网站下载MinGW https://sourceforge.net/projects/mingw/files/latest/download 二、安装 右键mingw-get-setup.exe&#xff0c;以管理员身份运行 点击Install安装 点击“Change”修改安装地…

BFS入门

目录 定义二叉树层次遍历电梯问题倒可乐BFS基本思想算法 四方访问 定义 BFS 通常是指广度优先搜索&#xff08;Breadth - First Search&#xff09;&#xff0c;它是一种图形数据结构的遍历算法。从给定的起始顶点开始&#xff0c;首先访问起始顶点的所有邻接顶点&#xff0c;然…

如何将CSDN的文章保存为PDF?

目录 1、打开CSDN文章2、按F12或者鼠标右键选择检查并进入控制台3、在控制台输入以下代码4、然后回车&#xff08;Enter&#xff09;如果纵向显示不全就横向 1、打开CSDN文章 2、按F12或者鼠标右键选择检查并进入控制台 3、在控制台输入以下代码 (function(){ $("#side&q…

25考研软件工程 西南大学跟重庆大学哪个难?

需知晓&#xff0c;西南大学每年报考人数众多&#xff0c;可这不代表报考软件工程专业的人数就多呀&#xff0c;况且西南大学的优势学科并非工科&#xff0c;故而软件工程的报考热度不会如题主所言那般高呢。 其次得明白&#xff0c;软件工程专业上岸难度方面&#xff0c;重庆大…

普通算法——二维前缀和

二维前缀和 题目链接&#xff1a;https://www.acwing.com/problem/content/798/ 题目描述&#xff1a; 输入一个 n n n 行 m m m 列的整数矩阵&#xff0c;再输入 q q q 个询问&#xff0c;每个询问包含四个整数 ** x 1 , y 1 , x 2 , y 2 x1,y1,x2,y2 x1,y1,x2,y2 &…

Mock神器:Easy-Mock 私有化部署及使用介绍

在现代前后端分离的开发模式中&#xff0c;后端接口的数据模拟是一个常见且必要的需求。尤其是在后端接口尚未开发完成时&#xff0c;前端开发需要依赖模拟数据进行开发与测试。Easy-Mock 是一个非常流行的开源工具&#xff08;虽然它已经停止更新好长时间了&#xff09;&#…

Java的Mvc整合Swagger的knife4框架

Swagger的介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger&#xff0c;就是把相关的信息存储在它定义的描述文件里面&#xff08;yml或json格式&#xff09;&#xff0c;再通过维护这个描述 文件可以去更…

01_Node.js入门 (黑马)

01_Node.js入门 知识点自测 从 index.js 出发&#xff0c;访问到 student/data.json 的相对路径如何写? A&#xff1a;../public/teacher/data.json B&#xff1a;./public/student/data.json C&#xff1a;../student/data.json <details><summary>答案</sum…

2024.12.5——攻防世界Training-WWW-Robots攻防世界baby_web

2024.12.5—攻防世界Training-WWW-Robots 知识点&#xff1a;robots协议 dirsearch工具 本题与第一道Robots协议十分类似&#xff0c;不做wp解析 大致步骤&#xff1a; step 1 打开靶机&#xff0c;发现是robots协议相关 step 2 用dirsearch进行扫描目录 step 3 url传参r…

电脑无法识别usb设备怎么办?电脑无法识别usb解决方法

usb设备是我们常解除的外部操作以及存储设备&#xff0c;它可以方便用户数据传输以及操作输入。但在使用过程中&#xff0c;大家基本都碰到过电脑无法识别usb设备这种情况。这种情况下&#xff0c;我们应该怎么办呢&#xff1f;下面将为你介绍几种可能的原因和解决方法&#xf…

【学习总结|DAY014】Java面向对象高级-继承、多态

一、继承&#xff08;Inheritance&#xff09; 1. 概述 继承是面向对象编程的一种特性&#xff0c;允许我们定义一个类&#xff08;称为子类或派生类&#xff09;以继承另一个类&#xff08;称为超类或基类&#xff09;的功能。 2. 语法格式 public class Zi extends Fu {/…

筑起厂区安全--叉车安全防护装置全解析

在繁忙的工业生产领域中&#xff0c;叉车作为搬运工&#xff0c;穿梭于仓储与生产线之间。然而&#xff0c;叉车的高效运作背后&#xff0c;也隐藏着诸多安全风险&#xff0c;尤其是在那些空间狭小、物流繁忙的环境中。为了降低这些潜在的危险&#xff0c;叉车安全防护装置便成…

MS SQL SERVER服务自动停止解决

报错原因 电脑异常重启&#xff0c;导致 MS SQL server 服务启动后自动停止&#xff0c;在【计算机管理】-【事件查看器】-【windows日志】中进行查看系统错误日志&#xff0c;在【应用程序】下发现可能的错误信息&#xff1a; 传递给数据库 ‘model’ 中的日志扫描操作的日志…

网络安全信息收集(总结)更新

目录 重点&#xff1a; 前言&#xff1a; 又学到了&#xff0c;就是我们什么时候要子域名收集&#xff0c;什么时候收集域名&#xff0c;重点应该放前面 思考&#xff1a; 信息收集分为哪几类&#xff0c;什么是主域名&#xff0c;为什么要收集主域名&#xff0c;为什么要收…

使用 Postman 上传二进制类型的图片到后端接口写法

我们有的时候会有需求&#xff0c;就是通过 postman 传递二进制图片到后端接口&#xff0c;如下图&#xff1a; 那我们的 Java 接口需要怎么写呢&#xff1f; Spring Boot 接收这些数据的方式需要使用 RequestBody 注解来处理原始的二进制数据&#xff08;byte[]&#xff09;。…

Java Web 7 请求响应(Postman)

前言&#xff08;SpringBoot程序请求响应流程&#xff09; 以上一章的程序为例&#xff0c;一个基于SpringBoot的方式开发一个web应用&#xff0c;浏览器发起请求 /hello 后 &#xff0c;给浏览器返回字符串 “Hello World ~”。 而我们在开发web程序时呢&#xff0c;定义了一…

pytorch多GPU训练教程

pytorch多GPU训练教程 文章目录 pytorch多GPU训练教程1. Torch 的两种并行化模型封装1.1 DataParallel1.2 DistributedDataParallel 2. 多GPU训练的三种架构组织方式2.2 数据不拆分&#xff0c;模型拆分&#xff08;Model Parallelism&#xff09;2.3 数据拆分&#xff0c;模型…

【opencv入门教程】9.视频加载

文章选自&#xff1a; 一、VideoCapture类 用于从视频文件、图像序列或摄像头捕获视频的类。函数&#xff1a;CV_WRAP VideoCapture();brief 默认构造函数CV_WRAP explicit VideoCapture(const String& filename, int apiPreference CAP_ANY);brief 使用 API 首选项打开…