播放器包提供了一个 <hyperframes-player> 自定义元素,该元素将 HyperFrames 组合嵌入到任何位置(任何框架或纯 HTML 中)。零依赖性,3KB gzip 压缩。
何时使用
当您需要时使用 @hyperframes/player:
- 将渲染的合成嵌入网站、仪表板或应用程序中
- 将类似视频的播放器添加到着陆页或产品演示中
- 显示文档或博客文章中的成分
如果您愿意,请使用不同的包:
- 交互式编辑作品 — 使用 studio
- 开发期间预览 - 使用 CLI (
npx hyperframes preview)
- 渲染为 MP4 — 使用 CLI 或 生产者
快速入门
通过CDN
如果您需要经典的 <script> 标签而不是 ESM,请使用显式全局构建:
通过npm
HTML 属性
JavaScript API
播放器镜像原生 <video> 元素 API:
框架示例
程序化
高级:iframe 访问
该组合在玩家 Shadow DOM 的沙盒 <iframe> 内运行。对于大多数用例,您不需要直接访问 - JavaScript API 和上面的事件就足够了。但是,如果您要在播放器之上构建编辑器、记录器或自定义时间线,则需要检查合成的 DOM 或读取其 __player / __timelines 运行时对象。 iframeElement getter 为这些消费者公开内部 iframe:
这是将玩家桥接到 @hyperframes/studio 等编辑器工具的规范方法。工作室导出一个 resolveIframe 帮助器,用于处理直接 iframe 引用和 Web 组件引用:
React:声明性引用模式
如果您更喜欢 JSX 而不是命令式元素创建,请将引用附加到 Web 组件并解析效果内的 iframe:
常见问题 — 如果将 <hyperframes-player> 元素本身(不是 iframeElement)传递到需要 <iframe> 的挂钩或 API 中,则每个 .contentWindow / .contentDocument 访问都会返回 null,因为 iframe 位于玩家的 Shadow DOM 内部。时间轴搜索、播放、暂停和 DOM 检查都是静默无操作的。 始终首先提取 iframeElement,或使用 @hyperframes/studio 中的 resolveIframe 来透明地处理 iframe 和 Web 组件主机。
建筑学
播放器在 Shadow DOM 容器内使用 iframe。这提供了:
- 隔离 — 组合 CSS/JS 不会泄漏到您的页面或与您的页面发生冲突
- 安全性 — iframe 沙箱限制组合功能
- 缩放 — 通过 CSS 转换自动缩放合成以适合玩家的容器
播放器通过 HyperFrames 运行时桥接协议 (postMessage) 与合成进行通信。现有的组合物无需修改即可工作。
当存在 controls 属性时,底部会出现最小覆盖层:
- 播放/暂停按钮(左)
- 滑动条 支持拖动(鼠标+触摸)
- 时间显示 显示当前/总持续时间(右)
- 3 秒不活动后自动隐藏,悬停时重新显示