参考
HTML Schema 参考
编写 Hyperframes HTML 合成的完整参考。
这是 Hyperframes 合成的完整 schema 参考。如需更温和的入门介绍,请参阅合成和数据属性。
概览
Hyperframes 使用 HTML 作为描述视频的权威来源:
框架管理的行为
框架读取数据属性并自动管理:
- 基本 clip 时间轴条目 — 从 clip 中读取
data-start、data-duration和data-track-index,并将它们添加到 GSAP 时间轴 - 媒体播放(播放、暂停、跳转)用于
<video>和<audio> - Clip 生命周期 — clip 根据
data-start和data-duration进行挂载/卸载 - 时间轴同步 — 保持媒体与 GSAP 主时间轴同步
- 媒体加载 — 等待所有媒体加载完毕后再解析时序
挂载/卸载控制的是存在性,而非外观。过渡效果(淡入、滑入)在脚本中以动画方式实现。
⚠️ Warning
不要在脚本中手动调用
video.play()、video.pause()、设置audio.currentTime,或挂载/卸载 clip。框架拥有媒体播放和 clip 生命周期的所有权。更多详情请参阅常见错误。
视口
每个合成必须在根元素上包含 data-width 和 data-height:
<div id="main" data-composition-id="my-video"
data-start="0" data-width="1920" data-height="1080">
<!-- clips -->
</div>
常用尺寸:
- 横向:
data-width="1920" data-height="1080" - 纵向:
data-width="1080" data-height="1920"
所有 Clip 属性
| 属性 | 适用对象 | 必需 | 描述 |
|---|---|---|---|
id | 所有 | 是 | 唯一标识符(例如 "el-1")。用于相对时序引用和 CSS 目标定位。 |
class="clip" | 可见元素 | 是 | 启用运行时可见性管理。纯音频 clip 不需要。 |
data-start | 所有 | 是 | 开始时间(秒),例如 "0"、"5.5",或用于相对时序的 clip ID 引用(例如 "intro")。 |
data-duration | video、img、audio | 见下文 | 持续时间(秒)。图像必须指定。视频/音频可选(默认为源时长)。合成上不使用。 |
data-track-index | 所有 | 是 | 时间轴轨道编号。控制 z 轴排序(值越大越靠前)。同一轨道上的 clip 不能重叠。 |
data-media-start | video、audio | 否 | 源文件中的播放偏移/修剪点(秒)。默认值:0。参见数据属性。 |
data-volume | audio、video | 否 | 音量级别,从 0 到 1。默认值:1。 |
data-composition-id | div | 合成上必需 | 唯一的合成 ID。必须与 window.__timelines 中使用的键匹配。 |
data-composition-src | div | 否 | 外部合成 HTML 文件的路径(用于嵌套合成)。 |
data-variable-values | div | 否 | 传递给嵌套合成的 JSON 值对象。框架会传递这些值,但你的合成脚本必须手动读取和应用它们。 |
data-width | div | 合成上必需 | 合成宽度(像素)。 |
data-height | div | 合成上必需 | 合成高度(像素)。 |
Clip 类型
相对时序
在 data-start 中引用另一个 clip 的 ID 表示"在该 clip 结束时开始":
<video id="intro" data-start="0" data-duration="10" data-track-index="0" src="..."></video>
<video id="main" data-start="intro" data-duration="20" data-track-index="0" src="..."></video>
main 在第 10 秒开始(当 intro 结束时)。
偏移量允许你添加间隔或重叠:
<!-- intro 之后 2 秒的间隔 -->
<video id="main" data-start="intro + 2" data-duration="20" data-track-index="0" src="..."></video>
<!-- 与 intro 重叠 0.5 秒 -->
<video id="main" data-start="intro - 0.5" data-duration="20" data-track-index="0" src="..."></video>
更深入的解释请参阅数据属性概念页面中的相对时序部分。
时间轴约定
框架在任何脚本运行之前初始化 window.__timelines = {}。每个合成必须在与其 data-composition-id 匹配的键上注册一个 GSAP 时间轴:
const tl = gsap.timeline({ paused: true });
// 添加动画
l.to("#title", { opacity: 1, duration: 0.5 }, 0);
l.to("#title", { opacity: 0, duration: 0.5 }, 4.5);
// 注册时间轴
window.__timelines["<data-composition-id>"] = tl;
规则
- 每个合成需要一个
<script>块来创建和注册其时间轴 - 所有时间轴必须以暂停状态开始(
{ paused: true }) - 框架自动将子时间轴嵌套到父时间轴中 — 不要手动添加
- 时长来自
tl.duration()— 不要在合成元素上添加data-duration - 时间轴必须是有限的(无无限循环或重复)
- 时间轴 ID 必须与根元素上的
data-composition-id属性完全匹配
有关使用 GSAP 时间轴的完整指南,请参阅 GSAP 动画。
字幕可发现性
对于字幕合成,在根节点上添加这些属性,以便框架能够识别并特殊处理字幕渲染:
<div
data-composition-id="captions"
data-timeline-role="captions"
data-caption-root="true"
...
>
输出检查清单
- 每个合成的根元素都有
data-width和data-height - 每个可复用的合成都位于自己的 HTML 文件中
- 外部合成通过
data-composition-src加载 - 每个外部合成文件使用
<template>包装器 - 所有 GSAP 时间轴都以正确的 ID 注册在
window.__timelines中 - 定时可见元素(图像、div)有
class="clip" - 视频元素没有
class="clip"(框架直接管理它们) - 所有
data-start引用都指向现有的 clip ID - 运行
npx hyperframes lint自动捕获结构问题