让视频在网页即点即播:HTML5 `<video>` 速通+避坑清单
58
0
0
以下笔记把「常见需求 → 最快代码 → 浏览器大坑」串成一条线,直接照抄就能上线。
1. 最小可运行模板
<video controls width="640" height="360">
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
您的浏览器不支持视频标签。
</video>- 多格式兜底:MP4(H.264+AAC) 放第一,WebM 给 Firefox/Chrome 省专利费,老浏览器再退到 OGV。
- width/height 写属性而不是 CSS,能防止页面在加载时「跳动」。
2. 常用属性一口表
| 属性 | 作用 | 必知坑 |
|---|---|---|
controls | 原生控制条 | 想自定义 UI 就隐藏它,自己画按钮 |
autoplay | 自动播放 | 仅静音视频在移动端大概率成功;有声需用户交互 |
muted | 默认静音 | 先静音 → 自动播放 → 再取消静音,绕过限制 |
loop | 循环 | 背景视频刚需 |
poster="cover.jpg" | 封面图 | 不填则首帧当封面,可能黑屏 |
preload="none" | 不预加载 | 省流量,点播放再拉数据 |
3. 自动播放被拦截?三行代码曲线救国
const v = document.querySelector('video');
v.muted = true; // ① 先静音
v.play(); // ② 尝试播放
v.onvolumechange = () => { v.muted = false }; // ③ 用户交互后再出声若仍需用户点击,就把 play() 放到按钮事件里,万无一失。4. JS 控制常用接口(写进度条/倍速/音量全靠它们)
video.play() // 返回 Promise,成功才播放
video.pause()
video.currentTime = 90 // 单位秒,跳到 1:30
video.volume = 0.5 // 0~1
video.playbackRate = 1.25 // 1.25 倍速
video.requestFullscreen() // 全屏5. 事件大全 → 做交互、埋点都能用
| 事件 | 触发时机 | 典型用途 |
|---|---|---|
loadedmetadata | 拿到时长/尺寸 | 渲染总时间 |
timeupdate | 播放中 250 ms 一次 | 更新进度条 |
ended | 播放完毕 | 下一集、埋点统计 |
waiting | 卡顿开始 | 显示加载动画 |
canplay | 缓冲足够可继续 | 隐藏加载动画 |
error | 解码/网络失败 | 提示用户或切换备用源 |
6. 移动端专享坑位
- 省电策略:部分 ROM 后台/锁屏会暂停视频,前端监听
visibilitychange再续播。 - 流量恐慌:默认
preload="metadata"只拉首段;长视频提供清晰度切换更贴心。 - 全屏样式:iPhone 无法阻止自动全屏,可把重要按钮放
controls里;Android 可以playsinline保持行内播放。
7. 封面 + 清晰度切换 一段代码搞定
<video id="v" controls poster="cover.jpg">
<source src="720p.mp4" data-res="720">
<source src="480p.mp4" data-res="480">
</video>
<script>
document.querySelector('#resSelect').onchange = e => {
const res = e.target.value;
const video = document.getElementById('v');
const curTime = video.currentTime;
const playing = !video.paused;
video.src = document.querySelector(`source[data-res="${res}"]`).src;
video.load();
video.currentTime = curTime;
if (playing) video.play();
};
</script>思路:切源 → 记录当前时间 → 继续播放,用户无感。
8. 格式、码率、分辨率速查
| 格式 | 是否专利 | 支持率 | 场景 |
|---|---|---|---|
| MP4 (H.264+AAC) | 是 | 全平台 | 保底首选 |
| WebM (VP9+Opus) | 否 | Chrome/Firefox/Edge | 开源、体积小 |
| OGV (Theora+Vorbis) | 否 | 老 Firefox | 仅作备胎 |
推荐参数
- 720p:1.5–2 Mbps
- 480p:800 kbps
- 有声短视频 24–30 fps,背景视频可降到 15 fps 省流量。
9. 打包带走口诀
**“MP4 打底,WebM 备用;
先静音再自动播放,poster 给封面;
timeupdate 画进度,ended 埋点下一集;
preload=none 省流量,error 事件切备用源。”**
背完这 4 句,下次视频需求 30 分钟收工。
0
快来点个赞吧
发表评论
评论列表