h5新增哪些api
- 行业动态
- 2025-05-14
- 4
H5新增API详解与应用场景分析
HTML5(简称H5)相较于HTML4新增了大量现代化API,极大扩展了前端开发的能力边界,以下从功能分类角度系统梳理H5核心新增API,并结合典型场景说明其价值。
客户端存储API
API名称 | 功能描述 | 典型应用场景 | 示例代码 |
---|---|---|---|
localStorage | 持久化存储数据(无过期时间) | 离线数据缓存、用户偏好设置 | localStorage.setItem('key', 'value'); |
sessionStorage | 会话级存储(页面关闭即清除) | 临时数据存储、表单防丢失 | sessionStorage.getItem('key'); |
IndexedDB | 结构化数据库(支持事务、索引) | 复杂数据管理、离线应用 | “`js |
let db = new Dexie("myDatabase");
db.version(1).stores({ friends: "++id,name,age" });
db.friends.put({name: "John", age:30});
```
| Web SQL Database
| 关系型数据库(已弃用,建议用IndexedDB替代) | 历史数据存储需求 | |
技术对比:localStorage
适合简单键值存储,IndexedDB
支持复杂查询和事务,sessionStorage
适用于短期数据,现代开发推荐优先使用IndexedDB
。
多媒体与图形处理
API名称 | 功能描述 | 典型应用场景 | 示例代码 |
---|---|---|---|
<canvas> | 2D/3D图形绘制上下文 | 游戏开发、数据可视化、图像编辑 | “`js |
let ctx = canvas.getContext('2d');
ctx.arc(50,50,40,0,Math.PI2);
ctx.fill();
```
| <video>
| 原生视频播放控件 | 视频网站、直播平台 | <video controls></video>
|
| <audio>
| 原生音频播放控件 | 背景音乐、语音交互 | <audio src="sound.mp3" loop></audio>
|
| WebGL | 3D图形渲染上下文 | 3D游戏、虚拟现实应用 | “`js
let gl = canvas.getContext(‘webgl’);
gl.clearColor(0,0,0,1);
gl.clear(gl.COLOR_BUFFER_BIT);
| `MediaStream` | 音视频流处理 | 实时通信、直播推流 | ```js
navigator.mediaDevices.getUserMedia({video:true})
.then(stream => video.srcObject = stream);
技术演进:Canvas与WebGL形成2D/3D双引擎,配合MediaStream实现音视频流处理,彻底解决传统Flash依赖问题。
实时通信与网络
API名称 | 功能描述 | 典型应用场景 | 示例代码 |
---|---|---|---|
WebSockets | 全双工通信协议 | 实时聊天、股票行情、在线协作 | “`js |
ws = new WebSocket('ws://example.com');
ws.onmessage = (e) => console.log(e.data);
```
| XMLHttpRequest
| 增强版AJAX(支持跨域、进度监听) | 异步数据请求、文件上传 | “js xhr.upload.onprogress = (e) => console.log(
${e.loaded}/${e.total}`);
| Beacon API | 异步发送少量数据(用于卸载前请求) | 日志上报、性能监控 | ```js
navigator.sendBeacon('/log', JSON.stringify(data));
| Server-Sent Events | 服务器推送事件 | 实时更新(股票、比分) | new EventSource('/events')
|
性能优化:WebSockets提供低延迟双向通信,相比传统长轮询减少70%以上带宽消耗。
设备与系统交互
API名称 | 功能描述 | 典型应用场景 | 示例代码 |
---|---|---|---|
Geolocation API | 获取地理位置信息 | LBS服务、地图导航 | “`js |
navigator.geolocation.getCurrentPosition((pos) => {
alert(`Latitude: ${pos.coords.latitude}`);
});
```
| Vibration API | 控制设备振动 | 游戏反馈、实时提醒 | navigator.vibrate([500,200,500]);
|
| Battery Status API | 获取电池状态 | 电量预警、省电模式 | “`js
navigator.getBatteryInfo().then(info => {
if(info.level < 0.2) alert(‘Battery low!’);
});
| Network Information API | 监测网络状态 | 离线检测、网络自适应 | ```js
window.addEventListener('offline', () => alert('You are offline!'));
| Ambient Light Sensor | 环境光强度检测(需硬件支持) | 自动亮度调节 | |
兼容性注意:部分API在桌面端支持有限(如振动API),需做好功能降级处理。
文件与数据处理
API名称 | 功能描述 | 典型应用场景 | 示例代码 |
---|---|---|---|
File API | 客户端文件操作 | 文件上传预览、本地文件处理 | “`js |
fileInput.files[0].slice(0,10241024); // 读取前1MB
```
| Blob API | 二进制大对象处理 | 生成下载链接、图片处理 | “`js
let blob = new Blob([‘Hello’], {type: ‘text/plain’});
url = URL.createObjectURL(blob);
| URL.createObjectURL | 生成临时资源地址 | 大文件传输、内存优化 | `URL.revokeObjectURL(url);` |
| ArrayBuffer | 二进制数据缓冲区 | 网络协议解析、音视频处理 | |
| Web Crypto API | 加密运算(SHA-256/AES等) | 客户端加密、数据签名 | ```js
crypto.subtle.digest('SHA-256', buffer).then(hash => {...});
安全增强:Web Crypto API提供标准化加密接口,避免开发者自行实现脆弱的加密算法。
页面交互增强
API名称 | 功能描述 | 典型应用场景 | 示例代码 |
---|---|---|---|
History API | 浏览器历史管理 | 单页应用路由、无刷新跳转 | “`js |
history.pushState({page:2}, 'Title', '/page2');
```
| Drag and Drop API | 拖放操作支持 | 文件上传、组件拖拽排序 | element.draggable = true;
|
| Fullscreen API | 全屏模式控制 | 视频全屏、演示模式 | document.fullscreenElement
|
| Page Visibility API | 页面可见性检测 | 媒体播放控制、性能优化 | “`js
document.visibilityState; // hidden/visible
| Custom Properties | HTML元素自定义数据属性 | 组件传参、标记管理 | `element.dataset.foo = 'bar';` |
体验优化:Page Visibility API可节省资源,当页面处于后台时暂停视频播放或停止动画渲染。
---
# 七、多线程与异步处理
| API名称 | 功能描述 | 典型应用场景 | 示例代码 |
|--------------------------|--------------------------------------------------------------------------|---------------------------------------|---------------------------------------|
| Web Workers | 后台线程处理 | 复杂计算、文件压缩 | ```js
let worker = new Worker('script.js');
worker.postMessage({cmd:'start'});
| Promises | 异步流程控制 | AJAX请求、顺序任务执行 | fetch('/data').then(response => response.json())
|
| Intersection Observer | 元素可见性检测 | 懒加载、广告追踪 | “`js
let io = new IntersectionObserver(entries => {
entries.forEach(e => e.target.style.opacity = e.isIntersecting ? 1 : 0);
});
| MutationObserver | DOM变动监听 | 实时监控页面变化 | `observer.observe(target, {attributes: true});` |
性能突破:Web Workers可将计算密集型任务(如图像处理)的CPU占用降低50%以上。
---
FAQs常见问题解答
Q1:如何检测浏览器是否支持某个H5 API?
A:可通过`typeof`或直接检查对象属性,
```js
if ('geolocation' in navigator) {
// 支持地理定位
} else {
alert('Geolocation is not supported in this browser.');
}
对于Promise类API,可使用try-catch
捕获异常:
try { await navigator.permissions.query({name: 'geolocation'}); } catch(e) { console.error('Permissions API not supported'); }
Q2:IndexedDB与localStorage如何选择?
A:根据数据复杂度和存储需求:
- localStorage:适合简单键值对存储(<5MB),如用户设置、临时缓存。
- IndexedDB:适合结构化数据存储(可存大量数据),支持事务、索引、游标,适合离线应用、复杂数据管理。
购物车应用中,商品列表用IndexedDB存储,用户偏好设置