上一篇
html5提供新的api
- 行业动态
- 2025-05-06
- 3
HTML5新增Canvas绘图、Geolocation定位、LocalStorage本地存储、WebSocket通信、Video/Audio多媒体、IndexedDB数据库、拖放API等,提升网页交互与离线能力,支持多线程及
HTML5 新API详解
本地存储(Local Storage & Session Storage)
用途:在客户端存储键值对数据,替代传统Cookie,支持更大容量。
区别:
|特性| localStorage
| sessionStorage
|
|—|—|—|
|生命周期|永久(手动清除)|会话结束(标签页关闭)|
|作用域|同源所有页面共享|同源同标签页共享|
|容量|约5MB|约5MB|
语法:
// 存储数据 localStorage.setItem('key', 'value'); // 读取数据 const value = localStorage.getItem('key'); // 删除数据 localStorage.removeItem('key'); // 清空所有数据 localStorage.clear();
WebSocket API
用途:实现浏览器与服务器的全双工实时通信,替代传统轮询。
优势:低延迟、双向通信、节省服务器资源。
示例:
const socket = new WebSocket('ws://example.com'); socket.onopen = () => { console.log('连接成功'); }; socket.onmessage = (event) => { console.log('收到消息:', event.data); }; socket.send('Hello Server');
地理定位(Geolocation)API
用途:获取用户设备的经纬度信息(需用户授权)。
关键方法:
navigator.geolocation.getCurrentPosition( (position) => { console.log(`纬度:${position.coords.latitude}`); console.log(`经度:${position.coords.longitude}`); }, (error) => { console.error('定位失败:', error); } );
Canvas API
用途:动态渲染2D/3D图形(如游戏、图表)。
2D示例:
const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.fillStyle = 'red'; ctx.fillRect(10, 10, 100, 50); // 绘制红色矩形
拖放(Drag and Drop)API
用途:实现元素的拖拽操作(如文件上传、组件排序)。
核心事件:
|事件|触发时机|
|—|—|
|dragstart
|开始拖拽时|
|dragover
|拖拽经过目标时|
|drop
|释放拖拽对象时|
示例:
element.addEventListener('dragstart', (e) => { e.dataTransfer.setData('text/plain', '拖拽的数据'); });
媒体元素(Video/Audio)API
新增属性:
autoplay
:自动播放controls
:显示控件栏loop
:循环播放muted
:静音
事件监听:
const video = document.querySelector('video'); video.addEventListener('play', () => { console.log('播放开始'); });
Web Worker API
用途:在后台线程执行脚本,避免阻塞主线程。
示例:
// 主线程 const worker = new Worker('worker.js'); worker.postMessage('Hello Worker'); worker.onmessage = (e) => { console.log('收到消息:', e.data); }; // worker.js self.onmessage = (e) => { postMessage(`Worker收到:${e.data}`); };
File API
用途:处理本地文件(如预览、上传前验证)。
示例:
const input = document.querySelector('input[type="file"]'); input.addEventListener('change', (e) => { const file = e.target.files[0]; const reader = new FileReader(); reader.onload = () => { console.log('文件内容:', reader.result); }; reader.readAsText(file); });
相关问题与解答
问题1:localStorage
和 Cookie
有什么区别?
解答:
- 容量:
localStorage
约5MB,Cookie
仅4KB。 - 生命周期:
localStorage
需手动清除,Cookie
可设置过期时间。 - 传输:
Cookie
会随HTTP请求发送,localStorage
不会。 - 用途:
localStorage
适合存储大量非敏感数据,Cookie
适合认证或小量数据。
问题2:为什么使用 WebSocket
比传统轮询更高效?
解答:
- 全双工通信:服务器可主动推送消息,无需客户端频繁询问。
- 低延迟:建立一次连接后持续通信,减少重复握手开销。
- 资源节约:减少不必要的HTTP请求,降低服务器