HTML5新特性:为Web带来的翻天覆地变化

cover

随着互联网的发展,HTML5作为Web开发的重要里程碑,为我们带来了一系列令人兴奋的新特性和功能。本文将带领大家探索HTML5的新特性,揭示其对Web技术的巨大影响。

一、介绍

HTML5作为HTML的最新版本,不仅强化了网页结构与内容,还引入了丰富的多媒体功能,以及改进的用户体验。这些新特性不仅为开发人员提供了更多的工具和选项,也为用户带来了更加流畅和丰富的网络体验。

主要新特性:

  1. 语义化标签:HTML5引入了一系列的语义化标签,如<header><footer><nav>等,使得网页结构更加清晰,利于搜索引擎优化(SEO)和无障碍访问。
  2. 多媒体支持:HTML5提供了内置的多媒体支持,包括<audio><video>标签,不再需要第三方插件如Flash,提升了网页性能和可访问性。
  3. Canvas绘图:借助<canvas>标签,开发者可以通过JavaScript绘制图形、动画等,为Web应用添加了更多的交互性和视觉效果。
  4. 本地存储:HTML5引入了Web Storage和IndexedDB等新的存储机制,使得网页可以在本地存储数据,提高了应用的性能和用户体验。

详细案例与代码解释:

1. 语义化标签
  • 案例代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Semantic HTML5</title>
</head>
<body><header><h1>Website Header</h1></header><nav><ul><li><a href="#">Home</a></li><li><a href="#">About</a></li><li><a href="#">Contact</a></li></ul></nav><section><h2>Main Content Section</h2><p>This is the main content of the website.</p></section><footer><p>&copy; 2024 My Website</p></footer>
</body>
</html>
  • 参数解释
    • <header>: 定义文档或文档部分的页眉。
    • <nav>: 定义导航链接的部分。
    • <section>: 定义文档中的节,比如章节、页眉、页脚或文档中的其他部分。
    • <footer>: 定义文档或文档部分的页脚。
      效果如下:
      result
2. 多媒体支持
  • 案例代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML5 Media</title>
</head>
<body><video controls width="400"><source src="movie.mp4" type="video/mp4">Your browser does not support the video tag.</video><audio controls><source src="music.mp3" type="audio/mpeg">Your browser does not support the audio tag.</audio>
</body>
</html>
  • 参数解释

    • <video>: 用于嵌入视频文件。
      • controls: 显示视频控制条。
      • width: 视频播放器的宽度。
    • <audio>: 用于嵌入音频文件。
      • controls: 显示音频控制条。

    结果如下:
    result

3. Canvas绘图
  • 案例代码

以逐渐浮现某元素效果为例:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Canvas Drawing</title>
</head><body><!-- 定义一个宽度为200像素,高度为100像素的画布 --><canvas id="myCanvas"></canvas> <!-- canvas不能用css设置属性,只能用js --><script>// 获取画布元素var canvas = document.getElementById('myCanvas');canvas.width = 200;canvas.height = 100;// 获取画布的二维渲染上下文var ctx = canvas.getContext('2d');// 定义颜色的透明度var alpha = 0;// 使用 requestAnimationFrame 逐帧更新画布内容function draw() {// 设置填充颜色为绿色,并设置透明度ctx.fillStyle = 'rgba(0, 128, 0, ' + alpha + ')';// 绘制一个矩形,其左上角坐标为(10,10),宽度为150像素,高度为80像素ctx.fillRect(10, 10, 150, 80);// 每帧增加透明度alpha += 0.001;// 当透明度大于等于1时,停止更新if (alpha < 1) {requestAnimationFrame(draw);}}// 两秒后执行setTimeout(function () {requestAnimationFrame(draw);}, 2000);</script>
</body></html>

requestAnimationFrame 是一个用于在浏览器中执行动画的 API。它允许您告诉浏览器您希望执行动画,并请求浏览器在下一次重绘之前调用指定的回调函数更新动画。这个函数被设计成在下一次重绘之前只更新一次动画,以提高性能和效率。
使用 requestAnimationFrame 可以帮助您创建平滑的动画,因为它会自动优化动画的帧率,以适应浏览器的性能和显示器的刷新率。例如,如果浏览器正在处理其他任务或者显示器的刷新率很低,那么 requestAnimationFrame 可能会减慢动画的帧率,以避免浪费资源。
requestAnimationFrame 的回调函数接收一个参数,即表示当前帧的时间戳(以毫秒为单位)的数值。这个时间戳可以用来计算动画的时间,以实现更精确的动画控制。
这个示例中,使用 requestAnimationFrame() 方法来逐帧更新画布内容,每帧都增加颜色的透明度,从而实现颜色慢慢浮现的效果;

  • 参数解释
  • <canvas>: 用于绘制图形的区域。
    • width: 画布的宽度。
    • height: 画布的高度。
  • getContext('2d'): 获取一个用于在画布上绘图的二维渲染上下文。
  • fillStyle: 设置用于填充绘制的形状的颜色、渐变或模式。
  • fillRect(x, y, width, height): 在画布上绘制一个矩形,其左上角坐标为 (x, y),宽度为 width,高度为 height。
  • requestAnimationFrame(callback): 请求浏览器在下一次重绘之前调用指定的回调函数更新动画。
  • rgba(red, green, blue, alpha): 以红、绿、蓝和 alpha 通道的值来指定颜色。alpha 通道的值范围为 0 到 1,用于指定颜色的不透明度。
  • setTimeout(callback, delay): 在指定的延迟(以毫秒计)后调用指定的回调函数。

Canvas 标签元素本身是一个画布容器,它的大小可以通过 HTML 属性或者 CSS 样式进行设置。但是,Canvas 内部绘制的图形和元素是使用 JavaScript 来控制的,不能通过 CSS 来直接控制它们的显示效果。例如,你可以使用 CSS 来设置 Canvas 元素的背景色、边框、大小等属性,但是无法使用 CSS 来设置 Canvas 内部的矩形、线条、文本等元素的颜色、大小、位置等属性。这些属性需要通过 JavaScript 中的 Canvas API 来控制。

效果如下:
canvas

4. 本地存储LocalStorage
  • 案例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Web Storage</title>
</head><body><h1>LocalStorage 示例</h1><input type="text" id="input" placeholder="输入文本"><button onclick="saveData()">保存数据</button><button onclick="loadData()">加载数据</button><p id="output"></p><script>// 保存数据到本地存储function saveData() {var input = document.getElementById('input').value; // 获取输入框中的值localStorage.setItem('userData', input); // 将值保存到本地存储中,键为'userData'}// 从本地存储中加载数据function loadData() {var output = document.getElementById('output'); // 获取输出元素var data = localStorage.getItem('userData'); // 从本地存储中获取键为'userData'的值if (data) { // 如果值不为空output.textContent = '加载的数据: ' + data; // 将值显示在输出元素中} else {output.textContent = '没有找到数据。'; // 否则显示提示信息}}</script>
</body></html>

参数解释:

  • localStorage: 用于在浏览器中存储键值对数据,数据在页面会话结束后仍然存在。
  • setItem(key, value): 将指定的值与指定的键相关联。
  • getItem(key): 获取与指定键相关联的值。如果键不存在,则返回 null

效果如下:
本地存储

5. 会话存储Session Storage

特性描述

sessionStorage提供了一种方式来临时存储数据,对于需要临时保存如表单数据、用户界面状态等信息的场景非常有用。每个会话都有自己的存储空间,并且这些数据只对当前会话的窗口可见。

案例代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>会话存储案例</title>
</head>
<body><input type="text" id="sessionInput"><button onclick="saveSessionData()">保存到会话存储</button><button onclick="showSessionData()">展示存储的结果</button><script>function saveSessionData() {var data = document.getElementById('sessionInput').value;sessionStorage.setItem('sessionData', data);}function showSessionData() {alert(sessionStorage.getItem('sessionData'));}</script>
</body>
</html>
参数解释
  • sessionStorage: 用于临时存储在浏览器会话中的键值对数据。
  • setItem(key, value): 将数据以键值对形式保存在sessionStorage中。
  • getItem(key): 从sessionStorage中检索与指定键相关联的值。

通过使用sessionStorage,开发者可以在用户浏览网页时临时存储必要的数据,而不必担心页面刷新或关闭后数据丢失的问题。这为创建具有更好用户体验的动态网页应用提供了更多的可能性。

效果如下:
会话存储

6.地理定位Geolocation API

原理

Geolocation API允许Web应用访问用户的地理位置信息。用户必须授权网站访问这些信息,保证了用户隐私的安全。一旦授权,Web应用就可以获取用户的纬度和经度信息,从而提供定位服务,如天气更新、附近的餐馆等。

案例代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>地理定位案例</title>
</head>
<body><!-- 点击按钮获取当前坐标 --><button onclick="getLocation()">获取当前坐标</button><!-- 显示坐标信息的元素 --><p id="location"></p><script>// 获取当前坐标function getLocation() {// 检查浏览器是否支持地理定位if (navigator.geolocation) {// 获取当前位置坐标navigator.geolocation.getCurrentPosition(showPosition, showError);} else {// 浏览器不支持地理定位document.getElementById("location").innerHTML = "该浏览器不支持地理定位。";}}// 显示坐标信息function showPosition(position) {// 获取纬度和经度var latlon = "纬度: " + position.coords.latitude +"<br>经度: " + position.coords.longitude;// 显示坐标信息document.getElementById("location").innerHTML = latlon;}// 显示错误信息function showError(error) {switch(error.code) {case error.PERMISSION_DENIED:document.getElementById("location").innerHTML = "用户拒绝了获取地理定位的请求。"break;case error.POSITION_UNAVAILABLE:document.getElementById("location").innerHTML = "位置信息不可用。"break;case error.TIMEOUT:document.getElementById("location").innerHTML = "获取用户位置超时。"break;case error.UNKNOWN_ERROR:document.getElementById("location").innerHTML = "发生了未知错误。"break;}}</script>
</body>
</html>
参数解释
  • navigator.geolocation: Web浏览器的Geolocation对象,用于访问用户的地理位置。

  • getCurrentPosition(success, error, options): 获取用户当前位置。接受三个参数:成功回调函数、错误回调函数和可选的选项对象。

    • success: 成功回调函数,接收一个position对象作为参数。
    • error: 错误回调函数,接收一个error对象作为参数。
    • options: 可选参数,如最大年龄、超时时间和是否需要高精度位置。

    实现效果如下:
    地理定位

7.元素拖动放置Drag and Drop API

原理

Drag and Drop API使得HTML元素可拖动。通过监听拖动事件,Web应用可以定义元素被拖动时的行为以及放下(drop)时的动作,使得用户界面更为直观和交互性强。

案例代码
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>拖拽放置示例</title><style>#div1,#div2 {width: 350px;height: 70px;padding: 10px;border: 1px solid #9c2c2c;}</style>
</head><body><div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br> <img id="drag1"src="../assit/logo.png" draggable="true" ondragstart="drag(event)" width="336" height="69"><script> // 禁止默认拖拽行为,允许dropping function allowDrop(ev) {ev.preventDefault();} // 在开始拖拽时,保存被拖拽元素的 id 到数据传输对象 dataTransfer 中 function drag(ev) {ev.dataTransfer.setData("text", ev.target.id);} // 在放置被拖拽元素时,prevent default 阻止默认行为,并将被拖拽元素追加到目标容器中 function drop(ev) {ev.preventDefault();var data = ev.dataTransfer.getData("text"); // 获取被拖拽元素的 id ev.target.appendChild(document.getElementById(data)); // 将被拖拽元素追加到目标容器中 } </script>
</body></html>
注释说明:
  • allowDrop(ev) 函数用于在拖拽元素移动到可放置容器上方时触发,通过调用 ev.preventDefault() 禁止默认的拖拽行为,并允许放置操作。
  • drag(ev) 函数用于在拖拽操作开始时触发,通过调用 ev.dataTransfer.setData(“text”, ev.target.id) 保存被拖拽元素的 id 到数据传输对象 dataTransfer 中。
  • drop(ev) 函数用于在拖拽元素放置到可放置容器上时触发,通过调用 ev.preventDefault() 禁止默认的拖拽行为,并通过获取数据传输对象中保存的被拖拽元素 id,将其追加到目标容器中。
参数解释:
  • ev 为触发事件对象,包含了与事件相关的信息和方法。
  • dataTransfer 为数据传输对象,用于在拖拽操作中保存和传递数据。
  • setData(“text”, ev.target.id) 用于向数据传输对象中保存被拖拽元素的 id。
  • getData(“text”) 用于从数据传输对象中获取被拖拽元素的 id。
  • appendChild() 用于将被拖拽元素追加到目标容器中。

效果如下:
拖拽放置

8.Web Sockets

原理

Web Sockets提供了一种在用户和服务器之间建立持久连接的方法。与传统的HTTP连接不同,WebSocket提供了全双工通信机制,即客户端和服务器可以在任何时刻发送数据,适用于需要实时数据交换的应用,如在线游戏、聊天应用等。

案例代码
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>WebSocket Demo</title>
</head>
<body><h1>WebSocket Demo</h1><div id="messages"></div><input type="text" id="messageInput" placeholder="Type a message..."><button id="sendButton">Send</button><script>var socket = new WebSocket("wss://echo.websocket.org");var messagesDiv = document.getElementById("messages");socket.onopen = function(event) {console.log("Connection opened");};socket.onmessage = function(event) {var message = document.createElement("p");message.textContent = "Received: " + event.data;messagesDiv.appendChild(message);};socket.onclose = function(event) {console.log("Connection closed");};document.getElementById("sendButton").addEventListener("click", function() {var input = document.getElementById("messageInput");var message = input.value;if (message.trim() !== "") {socket.send(message);var sentMessage = document.createElement("p");sentMessage.textContent = "Sent: " + message;messagesDiv.appendChild(sentMessage);input.value = "";}});</script>
</body>
</html>
参数解释
  • WebSocket: 构造函数,用于创建WebSocket连接。接受一个表示服务器地址的URL作为参数。
  • onopen: 连接成功建立时触发的事件处理程序。
  • onmessage: 接收到消息时触发的事件处理程序。
  • onclose: 连接关闭时触发的事件处理程序。
  • send(message): 方法,用于向服务器发送信息。
    效果如下:
    websocket

9.Web Workers

原理

Web Workers 的主要作用是允许 web 应用程序在主线程之外运行脚本操作,使得主线程(通常负责 UI 渲染、用户交互等)不会被阻塞,从而提供更流畅的用户体验。

下面是一个完整的 HTML 代码示例,包含了使用 Web Workers 的案例:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Web Workers Example</title>
</head><body><h1>Web Workers 案例</h1><p id="result"></p><script>if (window.Worker) {const myWorker = new Worker("../js/worker.js");myWorker.onmessage = function (e) {console.log('Message received from worker:', e.data);document.getElementById('result').textContent += e.data;};myWorker.postMessage("Hello, worker!");} else {console.log('Web Workers are not supported in this browser.');}</script>
</body></html>

在这个示例中,我们在 HTML 文档中添加了一个 p 元素,用于显示从 Web Worker 接收到的数据。在主脚本中,我们使用 document.getElementById 方法获取 p 元素,并将接收到的数据显示在页面上。

// worker.js
self.onmessage = function(event) {// 接收主线程发送过来的消息var data = event.data;console.log('Received message from main thread:', data);// 逐字输出中文名言var quote = "学而时习之,不亦说乎...";for (let i = 0; i < quote.length; i++) {setTimeout(() => {self.postMessage(quote[i]);}, 500 * i);}
};

请注意,worker.js 文件应该与 HTML 文件位于同一个目录下。
效果如下:
webworkers

以上就是对HTML5中新特性的详细介绍,包括它们的工作原理、使用案例,以及相关参数的解释。这些新特性大大扩展了Web开发的能力,使得创建富有表现力和高度互动的Web应用成为可能。

总结

HTML5的新特性为Web开发者提供了更多的选择和灵活性,使得开发更加高效和便捷。通过合理利用这些特性,我们可以为用户提供更加丰富、流畅的网络体验。

文章参考

  • W3C官方文档
  • MDN Web文档

项目地址

Github地址
拓展阅读


如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.

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

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

相关文章

reach功能的使用

1.reach添加后 1.reach添加后2 2.拷贝reach最后一帧的动作 3.删除reach(注意画选时如果reach延长不能直接删否则以前的动画也会删掉&#xff0c;要缩短reach后再删另外这两个灰原点也要删掉否则影响后边新加clip的对齐会出现乱七八糟的事情) 4.删除reach后&#xff0c;光标移到…

收藏:数据防泄漏系统推荐,数据防泄漏系统有哪些?

一金融机构在近期发生了一起数据泄露事件。 经过调查&#xff0c;发现是由于一名员工将包含客户敏感信息的文件通过电子邮件发送给了未经授权的第三方。 这一事件导致客户数据泄露&#xff0c;给该机构带来了严重的声誉损失和信任危机。 这一案例凸显了数据防泄漏系统的重要性…

Neo4j aura 官方网站快速入门新手教精读-从官方教程学习知识图谱

Neo4j 官方网站快速入门新手教精读 本文旨在为Neo4j新手提供一份全面的入门指南。除了基础的文本解释&#xff0c;我在里面还插入了每一步骤的详细截图或者自己画的图&#xff0c;从官方了解知识肯定比自己乱看要权威一些&#xff0c;有看不懂的不要纠结了解大概意思即可&#…

Java中心校智慧校园智慧班牌物联网平台源码

目录 智慧班牌 班牌首页 班级信息 课表信息 视频 图片 进离校管理 人脸登录页 学生个人中心 请假管理 成绩管理 家长留言 学生绑卡 学生评价 系统设置 通知管理 值日管理 倒计时 班级德育 班牌模式 1.课堂授课模式 2.家长会签到模式 3.考场模式 4.班级…

React富文本编辑器开发(一)

这是一个系统的完整的教程&#xff0c;每一节文章的内容都很重要。这个教程学完后自己可以开发出一个相当完美的富文本编辑器了。下面就开始我们今天的内容&#xff1a; 安装 是的&#xff0c;我们的开发是基于Slate的开发基础&#xff0c;所以要安装它&#xff1a; yarn ad…

【贪心算法】Leetcode 122. 买卖股票的最佳时机 II

【贪心算法】Leetcode 122. 买卖股票的最佳时机 II 122. 买卖股票的最佳时机 II贪心算法&#xff1a;整体利润拆为每天的利润&#xff0c;只收集每天的正利润 122. 买卖股票的最佳时机 II ---------------&#x1f388;&#x1f388;122. 买卖股票的最佳时机 II 题目链接&…

【Excel PDF 系列】EasyExcel + iText 库实现 Excel 转换 PDF

你知道的越多&#xff0c;你不知道的越多 点赞再看&#xff0c;养成习惯 如果您有疑问或者见解&#xff0c;欢迎指教&#xff1a; 企鹅&#xff1a;869192208 文章目录 前言转换前后效果引入 pom 配置代码实现定义 ExcelDataVo 对象主方法EasyExcel 监听器 前言 最近遇到生成 …

图论 - 最小生成树(Prime、Kruskal)

文章目录 前言Part 1&#xff1a;Prim算法求最小生成树1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2&#xff1a;Kruskal算法求最小生成树1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客介绍两种求最小生成树的方法&#xff…

辽宁博学优晨教育视频:引领安全可靠的学习新风尚

在数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;线上教育已成为越来越多人提升自我、拓宽视野的重要选择。辽宁博学优晨教育视频凭借其安全可靠的特质&#xff0c;在众多在线教育平台中脱颖而出&#xff0c;成为广大学子信赖的学习伙伴。 一、辽宁博学优晨教育视频…

MagiskHideProps 使用 props 开启 android 手机的 ro.debuggable =1 的方法

因为 CDSN 一直不给对旧的文章&#xff08;特别是边幅比较长的文章&#xff09;一直都无法修改&#xff0c;保存&#xff0c;重新发布 一直都是操作超时 我这里是补全 这边文章中 unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader&#xff0c;ROOT权…

python 使用curl_cffi 绕过jax3指纹-Cloudflare 5s盾

现在越来越多的网站已经能够通过JA3或者其他指纹信息&#xff0c;来识别你是不是爬虫了。传统的方式比如换UA&#xff0c;加代理是没有任何意义了&#xff0c;所以这个时候我们就需要使用到curl_cffi 了。 1.TLS 指纹是啥&#xff1f; 在绝大多数的网站都已经使用了 HTTPS&am…

构造pop链

反序列化视频笔记 第一步&#xff1a;找到目标触发echo调用$flag 第二步&#xff1a;触发_invoke函数调用appeng函数$varflag.php&#xff08;把对象当成函数&#xff09; 第三步&#xff1a;给$p赋值为对象&#xff0c;即function成为对象Modifier却被当成函数调用&#xff…

加密与安全_探索口令加密算法(PBE)

文章目录 概述疑问PBE 算法 &#xff08; Password Based Encryption&#xff09;CodePOM实现 小结 概述 加密与安全_探索对称加密算法中我们提到AES加密密钥长度是固定的128/192/256位&#xff0c;而不是我们用WinZip/WinRAR那样&#xff0c;随便输入几位都可以。 这是因为对…

2024最新算法:斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO)求解23个基准函数

一、斑翠鸟优化算法 斑翠鸟优化算法&#xff08;Pied Kingfisher Optimizer ,PKO&#xff09;&#xff0c;是由Abdelazim Hussien于2024年提出的一种基于群体的新型元启发式算法&#xff0c;它从自然界中观察到的斑翠鸟独特的狩猎行为和共生关系中汲取灵感。PKO 算法围绕三个不…

MySQL数据库引擎,以及常用引擎的区别

先看图&#xff1a; mysql常用引擎包括&#xff1a;MYISAM、Innodb、Memory、MERGE MYISAM&#xff1a; 全表锁&#xff0c;拥有较高的执行速度&#xff0c;不支持事务&#xff0c;不支持外键&#xff0c;并发性能差&#xff0c;占用空间相对较小&#xff0c;对事务完整性没有…

SpringBoot整合rabbitmq-主题交换机队列(四)

说明&#xff1a;Topic主题交换机它的大致流程是交换机和一个或者多个队列绑定&#xff0c;这个绑定的Routingkey是包含通配符的&#xff0c;满足通配符的队列会接收到消息。 通配符规则&#xff1a; #&#xff1a;匹配一个或多个词 *&#xff1a;匹配一个词 例如&#xff…

2024洗地机深度测评推荐,洗地机哪款值得入手?新手入门必看洗地机选购技巧

洗地机是近年来备受瞩目的智能家居产品&#xff0c;它能够有效地帮助我们节省劳动时间&#xff0c;高效清洁地面&#xff0c;从而减轻我们的劳动负担。洗地机实现了扫地和拖地的一体化功能&#xff0c;在扫地的同时还能顺便完成地面的拖洗工作。配备水箱的设计使得不再需要频繁…

【kubernetes VPA】记录一次安装 VPA 相关组件的报错解决过程

文章目录 1. 问题描述2. 问题原因3. 解决办法4. 参考链接 1. 问题描述 在执行 ./hack/vpa-up.sh脚本命令时&#xff0c;提示有报错。名为vpa-admission-controller的容器状态一直停留在ContainerCreating&#xff0c;从该Pod详细描述中得知&#xff0c;volume "tls-certs…

常见外设学习以及无线通信频率

常见外设 UART UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发器&#xff09;是一种异步、串行、全双工的通信总线。 UART 有3根线&#xff0c;分别是&#xff1a;发送线&#xff08;TX&#xff09;、接收线&#xff08;RX&#xff…

AT24C1024的模拟IIC驱动

AT24C1024是基于IIC的EEPROM&#xff0c;容量为1024/8128k bytes。它的引脚如下&#xff1a; 其中A1,A2为硬件地址引脚 WP为写保护引脚&#xff0c;一般我们需要读写&#xff0c;需要接低电平GND&#xff0c;接高的话则仅允许读 SDA和SCL则为IIC通信引脚 芯片通信采用IIC&…