news 2026/9/9 23:48:19

HyperFrames 行动型片尾 CTA 组件(cta-close)完全解读:逐词落地、留白排版与静止收束的动效原语

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HyperFrames 行动型片尾 CTA 组件(cta-close)完全解读:逐词落地、留白排版与静止收束的动效原语

HyperFrames 行动型片尾 CTA 组件(cta-close)完全解读:逐词落地、留白排版与静止收束的动效原语

【免费下载链接】hyperframesWrite HTML. Render video. Built for agents.项目地址: https://gitcode.com/GitHub_Trending/hy/hyperframes

导读:cta-close是 HyperFrames 组件目录中用于"收束影片"的动作型结尾原语(action-only close)。它以大字标题逐词落地填满 70%~85% 画幅、胶囊 CTA 按钮以单次克制过冲弹出,随后整组版式完全静止直至画面切换。读完本文,你将掌握其变量契约、时间编排内核、挂载 HTML 契约,并能在自己的 composition 中复用它或理解其源码级实现细节。

一、组件定位:它解决影片"最后一帧"的什么问题

在 HyperFrames 里,一段视频由若干 composition 拼装而成,每一段 HTML 都是"会变成帧"的文档(见 compositions 概念)。影片接近尾声时,通常需要给观众一个明确的行动指引或品牌落点。HyperFrames 在 registry/components 目录下收录了一批*-close结尾组件,cta-closelogo-brand-close相邻而居,两者的分工在源码 README 中写得很清楚:

  • cta-close动作型结尾(action),只有一个行动标题与一个按钮胶囊,"close films";
  • logo-brand-close身份型结尾(identity),wordmark + tagline + URL,"end on who made it"。

如果影片要以"让观众去做什么"收场,就用cta-close;如果要以"这是谁做的"收场,就用logo-brand-close。两者的区分同时记录在 logo-brand-close/README.md 中。

cta-close在 registry-item.json 中把这种定位写成机器可读的元数据:

  • family: "ui-props"jobs: ["ask"]tagsctaend-cardcloseask
  • profile: "holdable"——表征它是一种"入点后可长时间静止保持"的原语;
  • syncPoints声明了close-settled同步点(位于入点相位末端 1.32s),供编排系统对齐其他素材。

二、视觉规则与文案策略

组件源码注释 cta-close.html(第 1~27 行)与 README 一起定义了它的视觉语法:

  1. 行动标题(action line):display 级字号,2~4 个英文单词的收束动作。通过"字符感知的字号拟合"把整行宽度填到画幅的70%~85%,上下留出"真实的呼吸感",短行则以高度上限封顶,避免双词结尾显得单薄或顶到画框边缘。
  2. 按钮胶囊(button capsule):位于标题下方,是整组里唯一的彩色元素,以单次"克制过冲"(restrained overshoot)弹出。
  3. 单调配色(monotone):"墨色文字压在地面上"(ink on ground),accent 色只出现在胶囊上。
  4. 静止收束(dead-still hold):编排完成后的整个 HOLD 阶段绝对静止,不漂移、不脉动,直到画面被切换(cut)。

这套"行动 + 静止"的设计哲学正是它作为影片收束原语的存在意义——观众读完诉求后,画面已不再有任何干扰动作,等待下一个场景接管。

三、变量契约与默认值

组件的可调输入全部集中在 HTML<html>标签的data-composition-variables声明里,也同步镜像到 README 的变量表和 registry-item.json 的variables数组。每个变量都有默认值,因此组件"不做任何配置即可工作":

id类型默认值说明(含源码级补充)
action_linestringMake it happen2~4 个单词的收束行动标题;字符感知拟合把整行宽度定到画幅 70%~85%,短行以高度上限(30cqh)封顶
button_labelstringStart now胶囊内文案,正文 face 呈现,标签同样参与字符感知自动适配字号
accentenumgreen胶囊配色:green--brandblue--accentviolet--accent-2(带逐一的兜底色值)
exitenumnone出点行为:none保持到画面切换;fade/up让整组版式在最后 0.45s 内离场

从 cta-close.html 的声明可以看到完整 schema 字段:除id/type/default外,还带rolecontent/style/timing)和面向人/Agent 的labeldescription。这套结构是 HyperFrames 变量体系的标准形态——variables 概念文档 指出,labeldescription的意义在于让编辑 Agent "不需要打开 HTML 就能正确填写插槽"。

变量在脚本内的安全取值逻辑

源码 cta-close.html 展示了组件如何容错地消费变量:

var vars = window.__hyperframes && window.__hyperframes.getVariables ? window.__hyperframes.getVariables() : {}; var actionText = vars.action_line == null ? "Make it happen" : String(vars.action_line).trim().replace(/\s+/g, " "); var accentColors = { green: "var(--brand, #71f5a7)", blue: "var(--accent, #61a8ff)", violet: "var(--accent-2, #c5a3ff)", }; var accent = Object.prototype.hasOwnProperty.call(accentColors, vars.accent) ? vars.accent : "green"; var exit = vars.exit === "fade" || vars.exit === "up" ? vars.exit : "none";

要点有三:

  • 通过window.__hyperframes.getVariables()读取,该 API 会把挂载宿主传来的值逐层叠加在声明默认值之上(见 variables 概念文档);
  • 文本类变量做.trim()与连续空白归一(\s+→ 单个空格),避免多余空白破坏排版与宽度估算;
  • enum 类变量走白名单校验:非法值回落到安全默认,exit只有精确命中fade/up才开启出点逻辑,保证默认情况下组件一定以静止收束。

四、时间编排(Choreography / Envelope)

README 的 Choreography 三步骤与源码时间线一一对应,全部以秒为单位、不受宿主时间缩放影响("timeline is never time-scaled",短于固定相位的时长按比例压缩入/出相位,见 cta-close.html 注释)。

组件默认以3.5s 时长创制(3.5s authored)

  1. 行动标题逐词落地(约 0.06s 起):每个词被切分成独立<span class="cc-w">,以rise + fadeopacity:0, y:8cqh→ 归位)在power3.out缓动下**以 0.10s 错峰(stagger)**依次进入。切词逻辑保留词间自然空格(cta-close.htmlL162-L174),使 display 级 tracking 不会被挤压。
  2. 胶囊按钮单次克制弹出(0.72s 起):从scale: 0.85y: 3cqhback.out(1.5)弹到scale: 1——恰一次过冲;同时 0.22s 内做透明度渐入(power2.out)。1.32s 时整组编排完成。
  3. 静止保持到结尾:时间线通过一个铺满全长的空tl.set({}, {}, duration)(见 L242)"钉住"HOLD 相位,保证在保持期内任意 seek 都落在同一静态姿态上——这正是"确定性渲染、可寻址"的关键实现手段(可对照 determinism 概念)。

入点相关相位常量在 cta-close.html 中可查:IN_BASE = 1.32、单词出现WORDS_AT = 0.06*scale、词动画0.62*scale、词错峰0.1*scale、按钮出现BUTTON_AT = 0.72*scale、按钮动画0.6*scale。缩放系数envelopeScale = min(1, duration / (IN_BASE + OUT_BASE)),保证较短的挂载时长里相位整体等比压缩而不越界。

出点(exit)分支位于 L246-L254:fade让整组opacity归零,up额外叠加y: -5cqh上移,均用power2.in在最后OUT=0.45s完成。默认noneOUT_BASE = 0,画面一直静止到切换。

五、字符感知的字号拟合:确定性优先的布局

排版系统与"宽度 70%~85%"是如何实现的?这是本组件最有技术含量的部分。源码注释(L178-L194)说明:字号拟和在模板布局之前就确定性地完成——它不依赖运行时测量文本宽度,而是用字符数与估算的每字符宽度直接算出字号,再把结果写为 CSS 变量:

var actionCharacters = Math.max(1, Array.from(actionText).length); var actionSize = Math.min(24, 76 / (actionCharacters * 0.47)); var buttonCharacters = Math.max(1, Array.from(buttonText).length); var buttonSize = Math.min(3.5, 50 / (buttonCharacters * 0.5)); root.style.setProperty("--cc-action-size", "min(" + actionSize.toFixed(3) + "cqw, 30cqh)"); root.style.setProperty("--cc-button-size", "min(" + buttonSize.toFixed(3) + "cqw, 6cqh)");
  • 76 / (字符数 × 0.47):以0.47em作为常见 display 字体的平均字宽估计,把整行推到画幅宽度的 70%~85% 区间(分子 76 ≈ 0.76 画幅 × 100/0.47 的合并表达);
  • Math.min(24, ...)限制字号上限,min(…, 30cqh)再以高度兜底——双词短行因此保持"纪念碑感"而不触碰边缘
  • 按钮字号同理(50/(n×0.5)封顶3.5cqw,高度限6cqh),保证胶囊内文案自动适配且始终醒目。

布局层面用容器查询单位cqw/cqh(容器为container-type: size#root),文本元素white-space: nowrap单行呈现。单位尺寸在样式表(L86-L114)有兜底:--cc-action-size缺省min(10.4cqw, 30cqh)--cc-button-size缺省min(3.4cqw, 6cqh)。由于字号只依赖字符数,相同文案在任何分辨率/任意宿主盒子上都会产生相同的相对排版结果,这也是它可安全用于确定性渲染的原因。

六、挂载(Mount)契约:把组件放进你的 composition

安装到项目

组件目录页(docs/catalog/components/cta-close.mdx)给出安装方式:

npx hyperframes add cta-close

该命令只写一个文件:compositions/components/cta-close.html

在宿主 composition 中引用

README 提供的标准挂载片段如下(一个"弹性根",宿主 clip 给它什么盒子它就填满什么盒子):

<div class="clip" ><div id="cta-close-mount" class="mount-stage clip" contenteditable="false">【免费下载链接】hyperframesWrite HTML. Render video. Built for agents.项目地址: https://gitcode.com/GitHub_Trending/hy/hyperframes

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 23:48:12

Qbot 量化交易平台:完全本地部署,跑通策略回测全流程

Qbot 量化交易平台&#xff1a;完全本地部署&#xff0c;跑通策略回测全流程 【免费下载链接】Qbot [&#x1f525;updating ...] AI 自动量化交易机器人(完全本地部署) AI-powered Quantitative Investment Research Platform. &#x1f4c3; online docs: https://ufund-me.g…

作者头像 李华
网站建设 2026/9/9 23:46:46

Servlet+JSP图书管理系统开发:从分工设计到连接池、事务与JSP调试

简介&#xff1a;这是一套基于Servlet与JSP的图书管理系统完整项目源码&#xff0c;面向Java Web初学者及课程设计/毕业设计人群&#xff0c;通过实际案例展示图书信息增删改查等核心管理功能的实现方式。代码结构清晰&#xff0c;涵盖Servlet请求处理、JSP界面展示、JavaScrip…

作者头像 李华
网站建设 2026/9/9 23:46:34

Python操作剪映关键帧:JSON解析与批量自动化实战

简介&#xff1a;这是一份基于Python开发的剪映关键帧自动化工具桌面版源码&#xff0c;面向需要批量、高效处理视频关键帧的剪辑爱好者与开发者。工具可自动识别视频关键帧&#xff0c;并依据用户设定条件筛选最适合的剪辑点&#xff0c;也支持按需调节参数&#xff0c;实现个…

作者头像 李华