【HTML5】HTML5 特性
HTML5 特性
1. 语义化标签
<header>
:表示网页或某个区域的页眉部分,通常包含网站的标志、导航菜单等内容。<nav>
:表示导航区域,用于包含网站的主要导航链接。<main>
:表示网页的主要内容区域,通常包含网页的主要内容。<section>
:表示文档中的一个独立区域或部分,比如一篇文章中的章节、一个页面中的内容块等。<article>
:表示一个独立的、完整的文章或内容块,比如一篇博客文章、新闻报道等。<aside>
:表示一个侧边栏区域,通常用于包含与主要内容相关的附加信息,比如侧边栏、广告等。<footer>
:表示网页或某个区域的页脚部分,通常包含版权信息、联系方式等内容。<figure>
和<figcaption>
:<figure>
表示一个独立的内容块,通常用于包含图像、图表等媒体内容,而<figcaption>
表示<figure>
元素的标题或说明。<time>
:表示日期和时间,用于标记具有时间语义的内容,比如日期、时间、时间戳等。<progress>
:表示进度条,用于显示任务的完成进度。<details>
和<summary>
:<details>
表示可折叠的内容块,而<summary>
表示<details>
元素的摘要或标题。<mark>
:表示带有突出显示效果的文本,通常用于标记搜索关键词等。
2. 浏览器支持
所有现代的主流浏览器都支持大部分 HTML5 的特性,但不同浏览器对某些特性的支持程度可能会有所不同。
3. 多媒体标签
HTML5 引入了多媒体标签,用于在网页中嵌入音频、视频和其他多媒体内容。以下是 HTML5 中常用的多媒体标签:
-
<audio>
:用于嵌入音频内容,可以通过src
属性指定音频文件的 URL。可以使用<source>
元素指定多个不同格式的音频文件,以便在不同浏览器上提供更好的兼容性。<audio controls><source src="audio.mp3" type="audio/mpeg"><source src="audio.ogg" type="audio/ogg">Your browser does not support the audio element. </audio>
-
<video>
:用于嵌入视频内容,可以通过src
属性指定视频文件的 URL。同样可以使用<source>
元素指定多个不同格式的视频文件。<video controls width="640" height="360"><source src="video.mp4" type="video/mp4"><source src="video.webm" type="video/webm">Your browser does not support the video element. </video>
-
<iframe>
:虽然<iframe>
不是专门用于多媒体内容的标签,但它可以用于嵌入包含多媒体的外部网页,如 YouTube 视频、Google 地图等。<iframe src="https://www.youtube.com/embed/VIDEO_ID" width="560" height="315"></iframe>
-
<canvas>
:虽然<canvas>
通常用于绘制图形,但它也可以用于实现自定义的多媒体内容,如绘制动画、实时图像处理等。<canvas id="myCanvas" width="640" height="480"></canvas>
-
<track>
:用于指定视频或音频的字幕或描述文件。可以使用kind
属性指定字幕类型(如 subtitles、captions、descriptions 等)和src
属性指定字幕文件的 URL。<video controls><source src="video.mp4" type="video/mp4"><track kind="subtitles" src="subtitles_en.vtt" srclang="en" label="English"><track kind="subtitles" src="subtitles_es.vtt" srclang="es" label="Spanish">Your browser does not support the video element. </video>
4. Canvas 画布
Canvas 是 HTML5 提供的一个元素,用于在网页上绘制图形、动画和图像。它提供了一个图形环境,允许使用 JavaScript 和基于浏览器的 API 来绘制 2D 和 3D 图形。Canvas 具有强大的绘图功能,可以实现各种图形、动画、游戏等交互性的视觉效果。
Canvas 基本用法:
-
创建 Canvas 元素:
在 HTML 中,通过<canvas>
元素可以创建一个画布。Canvas 本身是一个无内容的元素,只需设置其width
和height
属性,指定画布的宽度和高度。<canvas id="myCanvas" width="400" height="200"></canvas>
-
获取 Canvas 上下文:
通过 JavaScript,可以获取<canvas>
元素的上下文对象(context),它是用于绘制图形的核心部分。使用getContext()
方法来获取不同类型的上下文对象,常用的是 2D 上下文context2D
。const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d');
-
绘制图形和图像:
使用获取到的ctx
上下文对象,可以在画布上绘制各种图形,如矩形、圆形、线条等,也可以绘制图像。常用的绘图方法有:fillRect()
绘制填充矩形、strokeRect()
绘制边框矩形、fillText()
绘制文本、arc()
绘制弧形等。// 绘制填充矩形 ctx.fillStyle = 'red'; // 设置填充颜色为红色 ctx.fillRect(50, 50, 100, 50); // 在坐标 (50, 50) 处绘制一个宽度为 100,高度为 50 的矩形// 绘制边框矩形 ctx.strokeStyle = 'blue'; // 设置边框颜色为蓝色 ctx.lineWidth = 2; // 设置边框线条宽度为 2 像素 ctx.strokeRect(200, 50, 100, 50); // 在坐标 (200, 50) 处绘制一个宽度为 100,高度为 50 的边框矩形// 绘制文本 ctx.fillStyle = 'green'; // 设置文本颜色为绿色 ctx.font = '20px Arial'; // 设置字体样式 ctx.fillText('Hello, Canvas!', 50, 150); // 在坐标 (50, 150) 处绘制文本
-
动画和帧率:
使用 Canvas 可以实现动画效果。可以使用 JavaScript 中的定时器(如requestAnimationFrame()
或setInterval()
)来更新画布内容,从而创建动画效果。通过控制刷新频率(帧率),可以调整动画的流畅度。function drawAnimation() {// 清空画布ctx.clearRect(0, 0, canvas.width, canvas.height);// 绘制动画元素// ...// 更新下一帧requestAnimationFrame(drawAnimation); }// 启动动画 drawAnimation();
-
像素级控制:
Canvas 允许对像素进行直接操作,从而实现更高级的绘图和图像处理。可以通过getImageData()
获取画布上指定区域的像素数据,然后对像素数据进行处理。const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); const data = imageData.data; // 获取像素数据 // 处理像素数据 // ... ctx.putImageData(imageData, 0, 0); // 将处理后的像素数据放回画布
-
支持 WebGL:
除了 2D 上下文context2D
,Canvas 还支持 3D 绘图技术 WebGL。WebGL 使用类似 OpenGL ES 的 API,可以在 Canvas 上进行高性能的 3D 图形渲染。const gl = canvas.getContext('webgl'); // 使用 WebGL 绘制 3D 图形 // ...
5. 本地存储
HTML5 引入了本地存储机制,其中包括 localStorage
和 sessionStorage
。
localStorage:
- 作用域:
localStorage
中存储的数据在同一域名下的所有页面和会话中都是共享的。即使用户关闭了浏览器或重新启动电脑,数据仍然保留,直到被显式删除。 - 数据保留:
localStorage
中存储的数据没有过期时间,除非被用户手动删除或网站使用 JavaScript 代码清除。 - 使用方法: 可以通过
localStorage.setItem(key, value)
方法设置数据,使用localStorage.getItem(key)
方法获取数据,使用localStorage.removeItem(key)
方法删除指定键的数据。 - 存储容量: 通常情况下,
localStorage
的存储容量在 5-10 MB 左右,具体大小因浏览器而异。
sessionStorage:
- 作用域:
sessionStorage
中存储的数据在同一窗口(或标签页)的所有页面间共享,但在新窗口或标签页中打开同一网站时,数据是不共享的。 - 数据保留:
sessionStorage
中存储的数据在会话结束时(当用户关闭浏览器标签页时)会被清除,或者当用户在同一标签页中导航到其他网页时也会被清除。 - 使用方法: 可以通过
sessionStorage.setItem(key, value)
方法设置数据,使用sessionStorage.getItem(key)
方法获取数据,使用sessionStorage.removeItem(key)
方法删除指定键的数据。 - 存储容量: 通常情况下,
sessionStorage
的存储容量也在 5-10 MB 左右,具体大小因浏览器而异。
使用场景:
localStorage
适合用于长期存储不过期的数据,比如用户的偏好设置、登录信息等。sessionStorage
适合用于临时存储在会话期间需要共享的数据,比如表单数据、临时状态等。
注意事项:
- 本地存储数据仅在浏览器端存储,并不会发送给服务器,因此不适合存储敏感信息。
- 不同浏览器、不同设备上的存储容量可能会有所不同,建议谨慎使用大量数据存储。
示例代码:
// 使用localStorage存储数据
localStorage.setItem('username', 'John');
const username = localStorage.getItem('username');
console.log(username); // 输出 "John"
localStorage.removeItem('username');// 使用sessionStorage存储数据
sessionStorage.setItem('theme', 'dark');
const theme = sessionStorage.getItem('theme');
console.log(theme); // 输出 "dark"
sessionStorage.removeItem('theme');
6. Web Workers
HTML5 中的 Web Workers 是一项用于在后台运行 JavaScript 脚本的技术。传统上,JavaScript 在主线程中执行,这意味着在执行复杂计算或耗时操作时,会阻塞页面的用户界面响应。为了避免这种情况,HTML5 引入了 Web Workers,允许将耗时的任务放在独立的线程中运行,不会影响主线程的执行。
Web Workers 的特点:
- 独立线程: Web Workers 在主线程之外运行,它们在自己的线程中执行,不会影响页面的主线程,因此不会阻塞页面的响应。
- 后台执行: Web Workers 可以在后台持续运行,即使页面被关闭或切换到其他页面,Worker 仍然可以继续执行。
- 无法访问 DOM: Web Workers 不能访问 DOM,它们完全在与页面分离的上下文中运行,这意味着它们不能直接操纵页面的元素或样式。
- 通信: Web Workers 与主线程之间可以通过消息传递进行通信,这使得在不同线程之间传递数据成为可能。
使用 Web Workers 的步骤:
-
创建 Worker: 使用
new Worker()
构造函数来创建一个 Web Worker。需要指定一个 JavaScript 文件的 URL,该文件将在 Worker 线程中运行。// 主线程中创建 Web Worker const worker = new Worker('worker.js');
-
处理消息: 在主线程中,可以通过
worker.onmessage
事件监听来自 Worker 的消息。// 主线程监听来自 Worker 的消息 worker.onmessage = function(event) {console.log('Received message from Worker:', event.data); };
-
发送消息: 在 Worker 中,可以使用
postMessage()
方法向主线程发送消息。// Worker 中向主线程发送消息 self.postMessage('Hello from Worker!');
-
终止 Worker: 在主线程中,可以使用
worker.terminate()
方法终止 Worker 的运行。// 主线程终止 Worker worker.terminate();
示例:
index.html:
<!DOCTYPE html>
<html>
<head><title>Web Workers Demo</title>
</head>
<body><button onclick="startWorker()">Start Worker</button><button onclick="stopWorker()">Stop Worker</button><script>let worker;function startWorker() {worker = new Worker('worker.js');worker.onmessage = function(event) {console.log('Received message from Worker:', event.data);};}function stopWorker() {if (worker) {worker.terminate();}}</script>
</body>
</html>
worker.js:
// Worker 线程中的代码
self.onmessage = function(event) {console.log('Received message in Worker:', event.data);self.postMessage('Hello from Worker!');
};
在上述示例中,当用户点击 “Start Worker” 按钮时,将创建一个 Web Worker,并在 Worker 中运行 worker.js
文件中的代码。然后,通过监听 onmessage
事件,在主线程中接收来自 Worker 的消息,并将其打印到控制台。用户点击 “Stop Worker” 按钮时,将终止 Worker 的运行。
这样,耗时的任务可以放在 Web Worker 中执行,不会影响主线程的响应,从而提高了页面的性能和用户体验。
相关文章:
【HTML5】HTML5 特性
HTML5 特性 1. 语义化标签 <header>:表示网页或某个区域的页眉部分,通常包含网站的标志、导航菜单等内容。<nav>:表示导航区域,用于包含网站的主要导航链接。<main>:表示网页的主要内容区域&#…...

【FreeRTOS】互斥量的使用与逐步实现
在FreeRTOS中,互斥量是一种用于保护共享资源的同步机制。它通过二进制信号量的方式,确保在任意时刻只有一个任务可以获取互斥量并访问共享资源,其他任务将被阻塞。使用互斥量的基本步骤包括创建互斥量、获取互斥量、访问共享资源和释放互斥量…...

Spring-Cloud-Openfeign如何传递用户信息?
用户信息传递 微服务系统中,前端会携带登录生成的token访问后端接口,请求会首先到达网关,网关一般会做token解析,然后把解析出来的用户ID放到http的请求头中继续传递给后端的微服务,微服务中会有拦截器来做用户信息的…...

OpenCV(十一):图像仿射变换
目录 1.图像仿射变换介绍 仿射变换: 仿射变换矩阵: 仿射变换公式: 2.仿射变换函数 仿射变换函数:warpAffine() 图像旋转:getRotationMatrix2D() 计算仿射变换矩阵:getAffineTransform() 3.demo 1.…...

多路波形发生器的控制
本次波形发生器,主要使用运算放大器、NE555以及一些其他的电阻电容器件来实现。整体电路图如下所示: 产生的三角波如下: 正弦波如下 方波如下: 运算放大器(Operational Amplifier,简称OP-AMP)是…...

[C/C++]天天酷跑超详细教程-中篇
个人主页:北海 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C/C🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!ǹ…...

面试被打脸,数据结构底层都不知道么--回去等通知吧
数据结构之常见的8种数据结构: -数组Array -链表 Linked List -堆 heap -栈 stack -队列 Queue -树 Tree -散列表 Hash -图 Graph 数据结构-链表篇 Linklist定义: -是一种线性表,并不会按线性的顺序存储数据,即逻辑上相邻…...
微服务面试问题小结( 微服务、分布式、MQ、网关、zookeeper、nginx)
什么是微服务,单体架构的优点和缺点,微服务架构的优点和缺点? 单体架构 优点:架构简单,维护成本低缺点:各个模块耦合度太高,当对一个模块进行更新修改时,会影响到其他模块ÿ…...
Vue3全局变量使用
全局变量(函数等)可以在任意组件内访问,可以当组件间的传值使用。 main.js import ./assets/main.cssimport { createApp } from vue import App from ./App.vueconst app createApp(App); app.config.globalProperties.$global_id10; app.…...
拼多多海量商品数据接口API 商品详情接口 商品价格主图接口
拼多多,作为中国最大的社交电商之一,提供了丰富的商品信息和海量的用户数据。对于广大开发者而言,如何快速、准确地获取这些数据,进而开发出各种创新应用,是他们关心的问题。本文将详细介绍拼多多海量商品数据接口API的…...

结构化日志记录增强网络安全性
日志是一种宝贵的资产,在监视和分析应用程序或组织的 IT 基础结构的整体安全状况和性能方面发挥着至关重要的作用。它们提供系统事件、用户活动、网络流量和应用程序行为的详细记录,从而深入了解潜在威胁或未经授权的访问尝试。虽然组织历来依赖于传统的…...

企业架构LNMP学习笔记5
Nginx: 常见用法: 1)web服务器软件 httpd http协议 同类的web服务器软件:apache Nginx(俄罗斯)IIS(微软)lighttpd(德国) 2)代理服务器 反向代…...

Idea安装免注册版ChatGPT
文章目录 一、前期准备二、开始使用 一、前期准备 1.准备Idea开发软件并打开(VS Code同理)! 2.【CtrlAltS】快捷键调出Settings窗口,如图 3.找到NexChatGPT 此插件不需要注册,可以直接使用(高级一些的需要会员收费限…...
git操作
一、查看远程分支 使用如下git命令查看所有远程分支: git branch -r 查看远程和本地所有分支: git branch -a 查看本地分支: git branch 在输出结果中,前面带* 的是当前分支。 二、拉取远程分支并创建本地分支 方法一 使用如下…...
9 | 求出不同性别和不同科目的学生平均分数
需求描述:学生成绩分析 背景: 我们有一组学生的成绩数据,其中包括学生的姓名、性别和科目,我们需要分析不同性别和不同科目的学生平均分数。 功能要求: 从数据源中获取学生的成绩数据,包括学生姓名、性别和科目。使用Spark进行数据处理,将学生数据按性别和科目分组。计…...
Java如何发起http的get请求的实现
加哥最近做第三方接口开发,对方提供的是get方式的http请求,下面加哥给大家进行了总结如何用java代码去发送http请求并获取结果。 下面是发送get请求的工具类 1.不要求携带token的方式 public static String getUrl(String tempurl,String bm) {String…...
webRtc 示例
1、使用socket.io进行会话 2、为了方便,参数写死在前端了,前端界面1代码如下(由界面1发起视频): <!DOCTYPE html> <html><head><title>Socket.IO chat</title><meta charset"…...

【RabbitMQ】服务启动成功,无法访问localhost:15672(RabbitMQ Management)
问题描述 RabbitMQ 服务已经启动成功,已经安装rabbitmq_management插件,无法访问RabbitMQ Management(http://localhost:15672/)。 原因分析 15672端口被Microsoft Edge占用。 解决方案 打开cmd终端,输入指令&#…...

【操作记录】pytorch_geometric安装方法
pytorch_geometric安装方法 github地址 主要不要直接pip install安装,会由于依赖无法安装而失败 点击here手动安装依赖 选择对应的pytorch版本,我的是Win10 Python3.8.3Pytorch1.8.1CUDA10.2 手动下载四个依赖包本地安装: 主要不要直接&am…...
EventSystem 事件系统
EventSystem 事件系统 事件系统在开发中必不可少事件系统使用观察者模式可以极大程度降低程序的耦合,之前的文章也讲过事件系统但是不够高效简洁,如何轻便高效优雅的实现一个事件呢?依然基于之前的AssemblyManager 程序集管理器和SingletonS…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...