离线存储

HTML5 离线存储是指通过 Web Storage API 提供的一种在客户端本地存储数据的机制,主要有两种方式:localStorage 和 sessionStorage。与传统的 Cookie 相比,Web Storage 提供了更大容量、灵活性,并且数据不会随着 HTTP 请求自动发送到服务器,这可以优化性能和安全性。此外,HTML5 还支持 离线应用缓存(Application Cache) 和 IndexedDB,用于更加复杂的数据存储需求和离线应用。 工作原理 HTML5 的离线存储主要通过以下几个机制来实现数据存储和访问: localStorage:一种持久性存储机制,数据存储在用户的浏览器中,即使关闭浏览器或重新加载页面,数据也不会丢失,除非明确被删除。其特点是跨页面、跨会话存储数据。 sessionStorage:会话级别的存储机制,只在当前页面的会话期间有效。当会话结束或浏览器窗口关闭时,数据会自动删除。其特点是只能在当前窗口或标签页中存储数据,不能跨窗口或标签页共享。 Application Cache(已被 Service Worker 替代):允许开发者将网站的某些资源缓存到本地,使得用户即使在离线的情况下也能访问特定页面。虽然该机制已被弃用,但它曾经是实现离线访问的核心。 IndexedDB:一种更为复杂的浏览器内置数据库,支持存储结构化数据,如对象和文件。它适用于更大规模的数据存储需求,并且允许通过索引进行高效的查询和数据操作。 使用方式 1. localStorage 特点:持久性存储,浏览器关闭后数据依然存在,除非手动清除。 使用方式: // 存储数据 localStorage.setItem('key', 'value'); // 获取数据 let value = localStorage.getItem('key'); // 删除数据 localStorage.removeItem('key'); // 清空所有 localStorage localStorage.clear(); 2. sessionStorage 特点:仅在当前会话期间有效,浏览器关闭或页面重新加载后数据会被清除。 使用方式: // 存储数据 sessionStorage.setItem('sessionKey', 'sessionValue'); // 获取数据 let sessionValue = sessionStorage.getItem('sessionKey'); // 删除数据 sessionStorage.removeItem('sessionKey'); // 清空所有 sessionStorage sessionStorage.clear(); 3. IndexedDB 特点:适合存储大量的结构化数据,支持异步 API 和事务。 使用方式: IndexedDB 的使用较为复杂,通常涉及打开数据库、创建事务、存储和检索数据等操作。一个简单的示例如下: let request = indexedDB.open('myDatabase', 1); request.onupgradeneeded = function(event) { let db = event.target.result; let objectStore = db.createObjectStore('myObjectStore', { keyPath: 'id' }); }; request.onsuccess = function(event) { let db = event.target.result; let transaction = db.transaction(['myObjectStore'], 'readwrite'); let objectStore = transaction.objectStore('myObjectStore'); objectStore.add({ id: 1, name: 'John Doe' }); }; 4. Application Cache(弃用) 特点:通过 manifest 文件指定需要缓存的资源,允许在离线时访问应用。 使用方式: 在 HTML 文档中指定 manifest 文件: <html manifest="app.manifest"> 然后在 app.manifest 文件中列出需要缓存的资源: ...

October 16, 2024

实体字符(转义字符)

HTML 的实体字符(HTML Entities)是用于显示某些特殊字符或符号的编码形式。 HTML 中某些符号具有特殊含义,例如 <, >, & 等字符不能直接在网页内容中使用,所以需要使用实体字符来表示它们。 常见的 HTML 实体字符 空格和控制字符 &nbsp;:空格字符 (non-breaking space) &nbsp; <!-- 表示一个空格 --> &lt;:小于号 < &lt;div&gt; <!-- 表示 <div> --> &gt;:大于号 > &gt;/div&gt; <!-- 表示 </div> --> &amp;:与符号 & &amp; <!-- 表示 & --> &quot;:双引号 " &quot;Hello&quot; <!-- 表示 "Hello" --> &apos;:单引号 ' &apos;Hello&apos; <!-- 表示 'Hello' --> 数学符号 &plus;:加号 + &minus;:减号 − &times;:乘号 × &divide;:除号 ÷ 货币符号 &dollar;:美元符号 $ &euro;:欧元符号 € &pound;:英镑符号 £ &yen;:日元符号 ¥ 其他常见符号 &copy;:版权符号 © &reg;:注册商标符号 ® &trade;:商标符号 ™ &sect;:章节符号 § &deg;:度数符号 ° 希腊字母 &alpha;:α &beta;:β &gamma;:γ &delta;:δ 为什么需要实体字符? 避免 HTML 解析冲突:例如 <, >, & 等符号在 HTML 中有特定的用途,用实体字符可以避免冲突。 显示特殊符号:例如版权符号、商标符号或货币符号等,不能直接在键盘上输入,使用实体字符可以确保正确显示。 常见考点 1. HTML 实体字符的定义与作用 什么是 HTML 实体字符?为什么需要使用它们? 实体字符用于在 HTML 中显示特殊符号(如 <, >, &, " 等)或不可见字符(如空格 、换行符等),避免与 HTML 语法冲突。 2. 常见的 HTML 实体字符 &lt;:小于号 < &gt;:大于号 > &amp;:与符号 & &quot;:双引号 " &apos;:单引号 ' &nbsp;:不间断空格 3. Unicode 和 ASCII 编码的实体字符 HTML 支持通过 &#xNNNN;(十六进制)或 &#NNNN;(十进制)表示 Unicode 字符。例如: &#x2665; 或 &#9829; 表示 ♥ 考察点可能涉及通过实体字符显示 Unicode 表情符号、语言字符等。 4. 转义字符 在 HTML 中如何使用实体字符进行转义? 为什么需要转义符号(如 <, >, &)?特别是在 HTML 元素内嵌 JavaScript 或样式时需要避免歧义。 安全性方面的考量,尤其是防止 XSS(跨站脚本攻击)。 5. 空白字符 &nbsp;(不间断空格):防止自动换行或保留多个空格。 &ensp; 和 **&emsp;**:半角和全角空格符号。 实体空白符在排版和布局中的应用(如对齐、占位)。 6. 其他常见实体字符 货币符号:如 &yen;(¥)、&euro;(€)。 数学符号:如 &plusmn;(±)、&times;(×)、&divide;(÷)。 特殊符号:如 &copy;(©)、&reg;(®)、&trade;(™)。 7. HTML5 实体字符扩展 HTML5 中新增的一些实体字符,如: **&le;**(≤)和 &ge;(≥) &bull;(•)用于列表符号 &hellip;(…)省略号 8. 实体字符与浏览器兼容性 浏览器如何处理不支持的实体字符? 考察点可能涉及浏览器对不同编码的支持,以及如何确保兼容性。 9. HTML 实体字符与国际化 如何通过实体字符支持多语言文本? 考察 Unicode 与实体字符在国际化中的应用,如如何使用实体字符表示非 ASCII 字符。 10. HTML 实体字符在输入表单中的应用 在表单中,如何防止特殊字符输入导致 HTML 注入攻击? 使用实体字符保护表单数据的完整性和安全性。

October 15, 2024

HTML 常见属性

HTML 元素的属性是用于控制元素行为或样式的附加信息。 以下是一些常见的 HTML 属性: 1. 通用属性(Global Attributes) 这些属性几乎可以应用于所有 HTML 元素: id:元素的唯一标识符,用于 JavaScript 或 CSS 选择。 <div id="main"></div> class:为元素指定一个或多个类名,用于 CSS 样式或 JavaScript 操作。 <div class="container header"></div> style:为元素设置内联样式。 <div style="color: red;"></div> title:为元素提供额外信息,当鼠标悬停在元素上时显示。 <button title="Click me!">Click</button> data-*:自定义属性,用于存储私有数据,以 data- 为前缀,可以通过 JavaScript 访问。 <div data-user-id="123"></div> 2. 事件属性(Event Attributes) 这些属性用于处理元素上的事件: onclick:定义单击事件处理函数。 <button onclick="alert('Clicked!')">Click me</button> onmouseover:鼠标悬停时触发的事件。 <div onmouseover="console.log('Mouse over')"></div> onkeydown:按下键盘时触发的事件。 <input type="text" onkeydown="handleKeyDown(event)"> 3. 表单相关属性 type:定义输入框类型,例如 text、password、email 等。 <input type="text"> name:定义表单元素的名称,用于表单提交。 <input type="text" name="username"> value:定义表单元素的默认值。 <input type="text" value="Default value"> placeholder:为输入框提供占位符文本,提示用户输入。 <input type="text" placeholder="Enter your name"> disabled:禁用输入元素,使其不可交互。 <input type="text" disabled> required:标记表单元素为必填项。 <input type="text" required> 4. 链接和资源加载属性 href:用于指定超链接的目标 URL。 <a href="https://example.com">Go to example.com</a> src:指定图像、脚本或其他资源的路径。 <img src="image.jpg" alt="Image description"> alt:为图像提供替代文本,图像无法加载时显示。 <img src="image.jpg" alt="Alternative text"> rel:指定链接与目标文档的关系,常用于 link 标签和 a 标签。 <link rel="stylesheet" href="style.css"> target:定义链接的打开方式,常用值包括 _self(当前窗口)和 _blank(新窗口)。 <a href="https://example.com" target="_blank">Open in new tab</a> 5. 多媒体属性 controls:为 <audio> 或 <video> 元素添加播放控件。 <video src="video.mp4" controls></video> autoplay:自动播放音频或视频。 <audio src="audio.mp3" autoplay></audio> loop:音频或视频播放完后重新开始播放。 <video src="video.mp4" loop></video> muted:自动静音视频或音频。 <audio src="audio.mp3" muted></audio> 6. 图像和媒体相关属性 width 和 height:定义图像或视频的宽度和高度。 <img src="image.jpg" width="200" height="100"> 7. iframe 属性 src:定义嵌入的网页 URL。 <iframe src="https://example.com"></iframe> sandbox:为嵌入内容提供更严格的限制,控制 iframe 的行为。 <iframe src="https://example.com" sandbox></iframe> 8. 语义化属性 role:为屏幕阅读器和辅助技术提供语义化描述。 <div role="navigation"></div> 9. 布局和可访问性属性 hidden:隐藏元素,元素不会显示在页面中。 <div hidden>This content is hidden</div> tabindex:定义元素的 tab 键导航顺序。 <button tabindex="1">First</button> <button tabindex="2">Second</button> 常见考点 1. 全局属性(Global Attributes) class:用于给元素指定样式类,如何使用多个类?有哪些常见用法? id:唯一标识元素,id 的作用和注意事项。 style:内联样式的作用及其优先级。 title:为元素提供额外信息(鼠标悬停时显示)。 data- 属性*:自定义数据属性,如何在 JavaScript 中访问 data-* 属性? 2. 事件属性(Event Attributes) onclick、onmouseover 等事件处理属性。 如何使用事件属性进行事件绑定? 事件属性和 JavaScript 事件监听器(addEventListener)的区别和应用场景。 3. 表单属性 name:用于提交表单数据时作为键名。 action:表单提交的目标 URL。 method:表单的提交方式(GET 或 POST)。 autocomplete:是否启用表单自动填充。 required、pattern、min/max 等 HTML5 校验属性。 4. 输入控件相关属性 value:为输入控件设置默认值。 placeholder:为输入框提供提示文本。 disabled:禁用输入控件。 readonly:只读属性,控件不能被修改。 maxlength/minlength:输入字符长度的限制。 accept:文件上传时,限制允许的文件类型(适用于 <input type="file">)。 5. 媒体元素属性 src:媒体文件的路径(适用于 <img>、<audio>、<video> 等)。 alt:图片无法加载时显示的替代文本。 controls:是否为媒体文件显示默认控制条。 autoplay:媒体文件是否自动播放。 loop:媒体文件是否循环播放。 muted:媒体文件是否静音。 6. 超链接相关属性 href:链接目标的 URL。 target:定义链接打开的方式(如 _blank 打开新窗口)。 download:允许下载链接资源,而不是导航到资源。 rel:定义链接与当前文档的关系(如 nofollow、noopener)。 7. iframe 属性 src:嵌入的文档或网页的 URL。 sandbox:启用或禁用特定行为(如禁止脚本、表单提交等)。 allow:控制 iframe 内的权限(如允许摄像头、麦克风访问)。 8. 图像和图形属性 srcset:为不同设备提供不同分辨率的图像资源。 sizes:配合 srcset,定义不同视口下图像显示的尺寸。 usemap:指定图片使用的图像映射。 height/width:定义图片或其他元素的高度和宽度。 9. meta 标签属性 charset:指定文档的字符编码(如 UTF-8)。 name 和 content:为文档提供元信息(如 description, viewport)。 http-equiv:配合 content,定义 HTTP 头信息(如 refresh, Content-Type)。 10. 无障碍相关属性 aria- 属性*:为无障碍工具(如屏幕阅读器)提供更多语义信息。 role:指定元素的功能角色,增强无障碍性。 11. iframe 和图片的懒加载 loading=“lazy”:为图片和 iframe 启用懒加载。 12. 语言和方向属性 lang:指定元素或页面的语言(如 lang="en")。 dir:指定文本的书写方向(如 ltr 左到右,rtl 右到左)。

October 15, 2024

HTML 元素分类

根据标签的功能和表现,HTML 标签主要分为以下几类: 1. 块级元素(Block-level Elements) 块级元素通常独占一行,并且可以包含其他块级元素或内联元素,能够扩展至父容器的全部宽度。 特点: 独占一行,默认情况下会在前后产生换行。 宽度默认是父元素的 100%。 可以设置 width、height、margin、padding 等布局属性。 常见的块级元素: <div>:无特定语义的容器,常用于布局。 <p>:段落标签。 <h1> 到 <h6>:标题标签,按重要性递减。 <ul>、<ol>、<li>:无序、有序列表及其项。 <header>、<footer>、<section>、<article>:HTML5 语义化标签,分别表示页头、页尾、内容区块等。 示例: <div> <h1>标题</h1> <p>这是一个段落。</p> </div> 2. 内联元素(Inline Elements) 内联元素与其他元素排列在同一行,且只占用其内容所需的宽度。它们不会独占一行,不能包含块级元素。 特点: 与相邻的内联元素排列在同一行。 仅占据自身内容的宽度,不会在前后产生换行。 不能设置 width、height(无效),但可以设置 padding 和 margin,只影响水平方向。 常见的内联元素: <span>:无特定语义的容器,常用于局部样式。 <a>:超链接。 <strong>:表示强调的文本,通常加粗显示。 <em>:表示强调的文本,通常斜体显示。 <img>:图像标签。 <input>:表单输入元素。 示例: <p>这是一个段落,<a href="#">点击这里</a> 了解更多。</p> 3. 内联块元素(Inline-block Elements) 内联块元素是同时具备内联元素和块级元素特性的元素。它们在布局上是内联的,但表现为块状元素,因此可以设置宽高。 特点: 与其他元素排列在同一行,但可设置宽度和高度。 不会自动换行。 常见的内联块元素: <img>:虽然图像显示在行内,但可以设置 width 和 height。 <button>:按钮。 <input type="text">:文本输入框。 CSS 设置为 display: inline-block 的元素。 示例: <span style="display: inline-block; width: 100px; height: 100px; background: red;"></span> 4. 自闭合元素(Self-closing Elements) 自闭合元素是没有闭合标签的元素,因为它们没有任何内容。这类标签通常用于插入内容或进行控制,而不包含其他内容。 ...

October 15, 2024

表单验证

HTML 表单是用于收集用户输入数据的重要元素,通常用于提交到服务器进行处理。它包括一系列控件,如文本输入框、按钮、复选框、单选按钮、文件上传等。表单通过 form 标签定义,用户可以通过这些控件与网页进行交互。 1. 基础结构 表单通过 <form> 标签创建,表单的 action 属性定义数据提交的目标 URL,method 属性定义提交方式(如 GET 或 POST)。 <form action="/submit" method="POST"> <input type="text" name="username"> <input type="submit" value="Submit"> </form> 2. 表单控件 HTML 表单提供了多种用户输入控件: 文本输入 (<input type="text">, <textarea>) 密码输入 (<input type="password">) 单选框和复选框 (<input type="radio">, <input type="checkbox">) 下拉列表 (<select>) 按钮 (<button>, <input type="submit">) 文件上传 (<input type="file">) 隐藏输入 (<input type="hidden">) 3. 表单的属性 action:指定表单数据提交到的 URL。 method:定义提交方式,常用 GET(将数据附在 URL 后)和 POST(将数据放入 HTTP 请求体中)。 enctype:指定数据的编码类型,常用于文件上传(如 multipart/form-data)。 autocomplete:启用或禁用浏览器的自动完成功能。 4. 表单校验 HTML5 引入了许多新的表单校验功能,能够减少 JavaScript 校验代码的复杂度。校验功能包括: ...

October 14, 2024

跨域通信

什么是跨域 在了解跨域之前,我们必须要了解一下同源策略。 跨域问题其实就是浏览器的同源策略造成的。 同源策略 同源策略限制了从同一个源加载的文档或脚本如何与另一个源的资源进行交互。这是浏览器的一个用于隔离潜在恶意文件的重要的安全机制。同源指的是:协议、端口号、域名必须一致。 跨源资源共享([CORS],或通俗地译为跨域资源共享)是一种基于 [HTTP] 头的机制,该机制通过允许服务器标示除了它自己以外的其他[源] (域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。 为什么会产生跨域 下表给出了与 URL wmq.com/dir/page.ht… 的源进行对比的示例: URL 是否跨域 原因 wmq.com/dir/page.ht… 同源 完全相同 wmq.com/dir/inner/a… 同源 只有路径不同 wmq.com/secure.html 跨域 协议不同 wmq.com:81/dir/etc.htm… 跨域 端口不同 ( http:// 默认端口是80) news.company.com/dir/other.h… 跨域 主机不同 同源策略:protocol(协议)、domain(域名)、port(端口)三者必须一致。 同源政策主要限制了三个方面: 当前域下的 js 脚本不能够访问其他域下的 cookie、localStorage 和 indexDB。 当前域下的 js 脚本不能够操作访问操作其他域下的 DOM。 当前域下 ajax 无法发送跨域请求。 源政策的目的主要是为了保证用户的信息安全,它只是对 js 脚本的一种限制,并不是对浏览器的限制,对于一般的 img、或者script 脚本请求都不会有跨域的限制,这是因为这些操作都不会通过响应结果来进行可能出现安全问题的操作。 有哪些解决跨域的办法 CORS CORS: 通过设置服务器端的响应头来允许跨域请求。这需要在服务器端进行配置,以允许特定的来源访问资源。例如,在Node.js的Express框架中,可以使用以下代码来设置CORS: const express = require('express'); const app = express(); app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); // 允许所有来源访问 res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); // 允许的请求头 res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); // 允许的请求方法 next(); }); // 其他路由和中间件 app.listen(3000, () => { console.log('Server is running on port 3000'); }); 减少OPTIONS请求次数 在跨域请求中,浏览器会自动处理一些非简单请求的预检流程,这包括"预检请求"(也被称为CORS预检请求)和"OPTIONS请求"。预检请求是发起一个HTTP OPTIONS请求到服务器,以确认目标资源是否支持跨域。这种机制是为了兼容同源策略而产生的,但有时这种额外的请求会导致性能问题。 ...

October 14, 2024

Web Storage

一、 简介 浏览器本地存储是指浏览器提供的一种机制,允许 Web 应用程序在浏览器端存储数据,以便在用户下次访问时可以快速获取和使用这些数据。一共两种存储方式:localStorage 和 sessionStorage。下面介绍下两种缓存的特性和在内部平台的一些应用。 二、localStorage 和 sessionStorage 2.1、区别 localStorage 和 sessionStorage 的主要区别是生命周期,具体区别如下: localStorage sessionStorage 生命周期 持久化存储:除非自行删除或清除缓存,否则一直存在 会话级别的存储:浏览器标签页或窗口关闭 作用域 相同浏览器,同域名,不同标签,不同窗口 相同浏览器,同域名,同源窗口 获取方式 window.localStorage window.sessionStorage 存储容量 5M 5M 容量限制的目的是防止滥用本地存储空间,导致用户浏览器变慢。 2.2、浏览器兼容性 1)现在的浏览器基本上都是支持这两种 Storage 特性的。各浏览器支持版本如下: Chrome Firefox IE Opera Safari Android Opera Mobile Safari Mobile localStorage 4 3.5 8 10.5 4 2.1 11 iOS 3.2 sessionStorage 5 2 8 10.5 4 2.1 11 iOS 3.2 2)如果使用的是老式浏览器,比如Internet Explorer 6、7 或者其他,就需要在使用前检测浏览器是否支持本地存储或者是否被禁用。以 localStorage 为例: ...

October 9, 2024

Canvas 和 SVG

1.Canvas Canvas 是 HTML5 中新增的一个元素,它提供了一种通过 JavaScript 来绘制图形的方式,使用笔刷绘制2D图案。通过 Canvas,我们可以在网页中动态地绘制出各种图形、图表、动画等内容,实现更丰富的交互效果。 工作方式 Canvas 的工作方式是,我们首先在 HTML 页面中添加一个 <canvas> 元素,并指定其宽度和高度,然后在 JavaScript 中获取该元素的上下文对象,并通过调用它的方法来绘制图形。Canvas 的上下文对象有多种,包括 2D 上下文、WebGL 上下文等,我们可以根据需求选择相应的上下文对象来进行绘制。 常用属性 属性 效果 fillStyle 填充颜色。默认为黑色 strokeStyle 描边颜色。默认为黑色 lineWidth 线条宽度。默认为 1 像素 lineCap 线条末端的样式,可选值有 butt、round 和 square。默认为 butt lineJoin 线条相交处的样式,可选值有 miter、round 和 bevel。默认为 miter。 miterLimit 线条相交处的最大斜接长度。默认为 10 像素 globalAlpha 绘制的透明度。默认为 1(不透明) shadowColor 阴影颜色。默认为黑色 shadowOffsetX、shadowOffsetY 阴影的偏移量和模糊程度 shadowBlur 模糊程度 优缺点 优点 基于矢量绘制,图形可以自由缩放而不失真 具有良好的跨浏览器兼容性 通过 JavaScript 动态生成图形,可以更加灵活地控制图形的显示和交互 缺点 无法处理复杂的交互事件、不支持跨域图像等 使用实例 这个实例中,我们使用了一个 HTML5 的 Canvas 元素,它的宽度和高度分别为 200 像素。在 JavaScript 中,我们获取了这个元素,并通过 getContext 方法获取了它的上下文对象。然后,我们使用 fillStyle 属性设置了矩形的填充颜色为红色,并使用 fillRect 方法绘制了一个起点坐标为 (50,50),宽度为 100 像素,高度为 100 像素的矩形。 ...

October 9, 2024

多媒体技术

对于大多数前端工程师来说,音视频技术是一个比较少涉足的领域, 本知识点主要介绍流媒体技术中的文本、图形、图像、音频和视频多种理论知识,涉及到播放器、web媒体技术、主流框架等内容。 一、音视频基础 1.1 视频 1.1.1 基础概念 码率 单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。 帧率 对视频来说,帧率对应这观看卡顿。帧率越高,流畅度越高,低帧率会造成视觉卡顿。 压缩率 经过压缩后文件的大小 / 原始文件的大小 * 100% = 压缩率。编码压缩越小越好,但压得越小,解压时间 分辨率 用于度量图像内数据量多少的一个参数,和视频清晰度息息相关。 1.1.2 视频容器格式 容器格式相信大家经常见到: MP4、AVI、FLV、TS/M3U8、WebM、OGV、MOV… 1.1.2 视频编码格式 H.264 目前最流行的编码格式。 H.265 新型的编码格式,高效的视频编码。用来以替代H.264/AVC编码标准。 VP9 VP9是WebM Project开发的下一代视频编码格式 。VP9支持从低比特率压缩到高质量超高清的所有Web和移动用例,并额外支持10/12位编码和HDR AV1 AOM(Alliance for Open Media,开放媒体联盟)制定的一个开源、免版权费的视频编码格式。AV1是google制定的VP9标准的继任者,也是H265强有力的竞争者。 1.2 音频 1.2.1 基础概念 采样率 音频采样率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。 采样大小 一秒钟所采的样本数为比特率,每个样本中信息的比特数就是位深,即采样精度,单位为Bit。 比特率 指每秒传送的比特(bit)数,又称数据信号速率。单位为比特/秒、千比特/秒或兆比特/秒。比特率越高,表示单位时间传送的数据就越多。 压缩率 原始音频数据与通过PCM等压缩编码技术压缩后的数据大小的比率 1.2.2 音频容器格式 音频格式也比较常见:WAV、AIFF、AMR、MP3、Ogg… 1.2.3 音频编码格式 PCM 脉冲编码调制(Pulse Code Modulation,PCM),PCM是数字通信的编码方式之一。 AAC-LC(MPEG AAC Low Complexity) 低复杂度编码解码器(AAC-LC — 低复杂度高级音频编码)是低比特率、优质音频 的高性能音频编码解码器。 AAC-LD (又名AAC低延迟或MPEG-4低延迟音频编码器),为电话会议和OTT服务量身打造的低延迟音频编解码器 LAC(Free Lossless Audio Codec) 免费无损音频编解码器。是一套著名的自由音频压缩编码,其特点是无损压缩。 2012年以来它已被很多软件及硬件音频产品(如CD等)所支持。 1.3 常见标签 1.3.1 <audio> 元素 1.3.1.1 基本用途 <audio> 元素用于在网页中嵌入音频内容。它可以播放音乐、播客、音效等。 ...

September 27, 2024

响应式图片

响应式是指实现不同屏幕分辨率的终端上浏览网页的不同展示方式。 本知识点的主要内容有: 为什么要使用响应式图片 怎么实现响应式图片 1、为什么要使用响应式图片 假如有一张图片的显示宽度为200px,那么,它在 1x(即设备像素比为 1 的显示器) 的显示器上,是占了 200 个物理像素(即实际所占的像素);它在 2x 的显示器上,实际上是占了 400 个物理像素;在 3x 的显示器上,实际上是占了 600 个物理像素;在 4x 的显示器上就是占了 800 个物理像素。 如果这个图片只提供 200 像素的尺寸,那么在 2x~4x 的显示器上看起来就很模糊。如果只提供 800 像素的版本,那么在 1x~3x 的设备上会显得多余,因为加载时间会相较长,所以我们要使用响应式图片。 再比如一个场景,相同的banner,在电脑上需要使用大图,但是手机上面使用小图,不然会造成手机上加载慢浪费流量等问题,这也可以使用响应式图片来解决。 2、实现方法 css3 media query 一个办法是使用backgound-image结合媒体查询,如下所示: .banner{ background-image: url(/static/large.jpg); } @media screen and (max-width: 767px){ background-image: url(/static/small.jpg); } 这种方法的缺点是对SEO不太友好,因为如果使用img标签还可以写个alt属性。 picture标签 <picture> <source srcset="banner_w1000.jpg" media="(min-width: 801px)"> <source srcset="banner_w800.jpg" media="(max-width: 800px)"> <img src="banner_w800.jpg" alt=""> </picture> 如上,如果页面宽度大于800px(PC),则加载大图,而在手机上加载小图。这样写浏览器就只会加载source里面的一张图片。但是如果是用js动态插进去的,它还是会去加载两张,只有写在html里面加载初始化页面的时候才只加载一张。 picture必须要写img标签,否则无法显示,对picture的操作最后都是在img上面,例如onload事件是在img标签触发的,picture和source是不会进行layout的,它们的宽和高都是0。 另外使用source,还可以对图片格式做一些兼容处理: <picture> <source type="image/webp" srcset="banner.webp"> <img src="banner.jpg" alt=""> </picture> webp在保持同等清晰度的情况下,体积可以减少一半,但是目前只有Chrome支持,Safari和firefox一直处于实验阶段,所以其它的浏览器如firefox将会加载jpg格式的照片: ...

September 27, 2024