元素不可见且不响应 CSS,须通过 mode 属性控制:仅 'showing' 和 'disabled' 有效;切换字幕需匹配 kind 和 language,并监听 addtrack 动态初始化。

元素本身不可见,也不占布局空间,它只是为 或 提供字幕、描述等元数据的容器——所以“隐藏”它不是靠 CSS,而是控制其 mode 属性。
track.mode 设为 disabled 才算真正关闭
浏览器只在 mode === 'showing' 时渲染字幕;设为 'disabled' 后,字幕不显示、不触发 cuechange、也不参与时间轴匹配。设为 'hidden' 是无效值(会被忽略),'showing' 和 'disabled' 是仅有的两个可生效状态。
- 错误写法:
track.style.display = 'none'——不响应任何 CSS 可见性属性 - 正确写法:
track.mode = 'disabled',之后再切回'showing'即可恢复 - 注意:多个
共存时,只有mode === 'showing'的那一个会生效;其余自动降级为disabled
用 JavaScript 切换字幕轨道时别漏掉 kind 和 language 匹配
用户点击“启用英文字幕”,你不能只设 track.mode = 'showing',必须先找到 kind === 'subtitles' 且 language === 'en' 的那条轨道——否则可能误启描述轨(descriptions)或章节轨(chapters)。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
- 常见错误:遍历
video.textTracks时没过滤kind,结果把metadata轨道也设成了showing,但实际无视觉效果 - 推荐写法:
Array.from(video.textTracks).find(t => t.kind === 'subtitles' && t.language === 'en') - 切换前建议先统一设所有轨道为
disabled,再单独启用目标轨,避免多轨同时showing导致冲突
监听 track 列表变化要用 addtrack/removetrack,不是 DOMContentLoaded
标签是 HTML 解析时静态插入的,但流媒体场景下字幕轨常通过 addTextTrack() 动态添加——此时 textTracks 长度会变,但 DOM 树里看不到新增节点。
- 错误假设:等
DOMContentLoaded就能拿到全部textTracks—— 实际可能为空,因为动态轨还没加 - 正确做法:给
video.textTracks绑定addtrack事件,每次新增就初始化它的mode状态 - 注意:
mode变更不会触发任何事件,UI 同步必须由 JS 主动维护(比如更新按钮文案或选中态)
最易被忽略的一点:哪怕 标签写了 default 属性,加载后它的 mode 仍可能是 'disabled'(尤其在跨域或 CORS 限制下);不要依赖 HTML 属性,初始化时务必显式设置 mode。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










