Code Slice Hero
Una superficie completa de mosaicos cuadrados lleva un titular sin costuras. Un cursor imaginario cruza la superficie; los mosaicos cercanos responden a su campo de profundidad gaussiano con elevación e inclinación, y solo las celdas que intersectan la silueta de cualquier titular se voltean para revelar el titular trasero. Toda la cuadrícula es un solo dibujo de WebGL 2 instanciado con un par de texturas frontal/trasera compartido, más un pase de sombras proyectadas por lotes. La copia, el tamaño del texto y el tamaño de la celda cuadrada son independientes, por lo que los mosaicos nunca se estiran. La dirección del barrido, la fuerza del easing, el radio del cursor, la caída, la profundidad, el rebote y la sombra son variables.
ID de composición: code-slice-hero. Duración 8 s a 30 fps, 1920×1080.
Archivos
code-slice-hero.html(24 KB)assets/Geist-Bold.ttf(65 KB)assets/Geist-OFL.txt(4 KB)assets/gsap-3.14.2.min.js(128 KB)assets/GSAP-NOTICE.txt(1 KB)shadows.js(10 KB)surface.js(8 KB)
Instalación
Instala con npx hyperframes add code-slice-hero; por defecto los archivos anteriores se colocan en compositions/code-slice-hero/. Luego monta el bloque desde el index.html anfitrión:
<div
data-composition-id="code-slice-hero"
data-composition-src="compositions/code-slice-hero/code-slice-hero.html"
data-start="0"
data-duration="8"
data-track-index="1"
data-width="1920"
data-height="1080"
></div>
Renderiza con valores personalizados apuntando directamente al archivo de composición:
npx --yes [email protected] render 'compositions/code-slice-hero/code-slice-hero.html' --variables '{"headline":"HAZLO","reverseHeadline":"IMPORTA."'
Variables
Se leen en tiempo de ejecución mediante window.__hyperframes.getVariables(); se declaran en la raíz de la composición como data-composition-variables (atributo entre comillas simples, JSON simple).
| id | tipo | predeterminado | etiqueta / rango |
|---|---|---|---|
headline | cadena | "HAZLO" | Copia · Titular frontal máx. 32 caracteres |
reverseHeadline | cadena | "IMPORTA." | Copia · Titular trasero máx. 32 caracteres |
direction | enum | "izquierda-a-derecha" | Movimiento · Dirección del barrido (izquierda-a-derecha |
sweepDuration | número | 4.2 | Movimiento · Duración del barrido 2.6–4.5 paso 0.05 |
sweepEaseStrength | número | 3 | Movimiento · Fuerza del easing del barrido 0–3 paso 0.05 |
flipDuration | número | 0.75 | Movimiento · Duración del volteo de cada mosaico 0.65–1.65 paso 0.05 |
cursorRadius | número | 210 | Cursor · Radio de influencia 160–480 paso 10 |
cursorFalloff | número | 1.4 | Cursor · Caída de la influencia 0.4–3.5 paso 0.05 |
cursorDepth | número | 80 | Cursor · Profundidad (+ hacia la cámara) -320–320 paso 10 |
tiltStrength | número | 55 | Cursor · Fuerza de inclinación 0–55 paso 1 |
noiseStrength | número | 2 | Movimiento · Variación orgánica 0–2 paso 0.05 |
flipBounce | número | 0.15 | Movimiento · Rebote elástico del volteo 0–0.8 paso 0.05 |
cellSize | número | 112 | Rebanadas · Tamaño de celda cuadrada 24–120 paso 4 |
formationScale | número | 1 | Rebanadas · Escala de formación local 0.94–1 paso 0.001 |
fontSize | número | 310 | Tipo · Tamaño máximo 160–480 paso 5 |
behindColor | color | "#212121" | Superficie · Fondo detrás del mosaico |
shadowStrength | número | 0.19 | Superficie · Fuerza de la sombra proyectada 0–0.65 paso 0.01 |
shadowSoftness | número | 4 | Superficie · Suavidad de la sombra proyectada 0.5–4 paso 0.1 |
Contrato de tiempo de ejecución
- Una línea de tiempo GSAP pausada registrada como
window.__timelines["code-slice-hero"]. - Se resincroniza con el CustomEvent
hf-seek; cada fotograma es una función de forma cerrada del tiempo (solo PRNG con semilla, sin bucles rAF, sin Date.now). - Renderizador: GSAP, Canvas 2D, PRNG con semilla.
- Dependencias externas de tiempo de ejecución: ninguna (servidas localmente).
- Fuentes locales: assets/Geist-Bold.ttf.
Reglas de edición (del proyecto fuente)
- Mantén
data-composition-variablescomo un atributo entre comillas simples con JSON con". Nunca lo guardes a través del panel de Diseño de Studio. - No coloques
<canvas>en el marcado estático; créalo en tiempo de ejecución. - Mantén cada estado visual como una función de t; la seguridad de búsqueda es lo que hace que el bloque sea renderizable.