返回 html-video
04-benefits-flowchart.html
根目录 / templates / frame-product-promo-30s / compositions / 04-benefits-flowchart.html
1 <template id="04-benefits-flowchart-template">
2 <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
3 <link href="https://fonts.googleapis.com/css2?family=Azeret+Mono:wght@500;700&display=block" rel="stylesheet" />
4
5 <div
6 data-composition-id="04-benefits-flowchart"
7 data-start="0"
8 data-duration="4.8"
9 data-width="1920"
10 data-height="1080"
11 >
12 <div class="stage-04" style="--edge: #A155FF; --node-glow: rgba(161,85,255,0.7); --energy: #A155FF;">
13 <div class="grid-floor"></div>
14
15 <div class="benefit-stack">
16 <div class="benefit b-fast">Fast</div>
17 <div class="benefit b-focused">Focused</div>
18 <div class="benefit b-ai">AI-native</div>
19 </div>
20
21 <svg class="flow" viewBox="0 0 1920 1080" xmlns="http://www.w3.org/2000/svg">
22 <g class="edges" stroke="var(--edge)" stroke-width="2" fill="none" stroke-linecap="round">
23 <line class="edge e1" x1="480" y1="540" x2="720" y2="380" />
24 <line class="edge e2" x1="480" y1="540" x2="720" y2="540" />
25 <line class="edge e3" x1="480" y1="540" x2="720" y2="700" />
26 <line class="edge e4" x1="800" y1="380" x2="1040" y2="300" />
27 <line class="edge e5" x1="800" y1="540" x2="1040" y2="540" />
28 <line class="edge e6" x1="800" y1="700" x2="1040" y2="780" />
29 <line class="edge e7" x1="1120" y1="300" x2="1360" y2="420" />
30 <line class="edge e8" x1="1120" y1="540" x2="1360" y2="540" />
31 <line class="edge e9" x1="1120" y1="780" x2="1360" y2="660" />
32 </g>
33
34 <g class="nodes">
35 <circle class="node n1" cx="440" cy="540" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
36 <circle class="node n2" cx="760" cy="380" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
37 <circle class="node n3" cx="760" cy="540" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
38 <circle class="node n4" cx="760" cy="700" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
39 <circle class="node n5" cx="1080" cy="300" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
40 <circle class="node n6" cx="1080" cy="540" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
41 <circle class="node n7" cx="1080" cy="780" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
42 <circle class="node n8" cx="1400" cy="420" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
43 <circle class="node n9" cx="1400" cy="540" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
44 <circle class="node n10" cx="1400" cy="660" r="32" fill="#0a0a0a" stroke="var(--edge)" stroke-width="2" />
45 </g>
46 </svg>
47
48 <div class="comet"></div>
49 <div class="vignette"></div>
50 <div class="grain"></div>
51 </div>
52
53 <style>
54 [data-composition-id="04-benefits-flowchart"] {
55 position: absolute; inset: 0; overflow: hidden; background: #000;
56 }
57 [data-composition-id="04-benefits-flowchart"] .stage-04 { position: absolute; inset: 0; }
58 [data-composition-id="04-benefits-flowchart"] .grid-floor {
59 position: absolute; inset: 0;
60 transform: perspective(900px) rotateX(60deg) translateY(25%);
61 background:
62 repeating-linear-gradient(0deg, rgba(255,255,255,0.04) 0 1px, transparent 1px 80px),
63 repeating-linear-gradient(90deg, rgba(255,255,255,0.04) 0 1px, transparent 1px 80px);
64 background-color: #000;
65 }
66 [data-composition-id="04-benefits-flowchart"] .benefit-stack {
67 position: absolute;
68 top: 80px; right: 120px;
69 text-align: right;
70 font-family: "Azeret Mono", monospace;
71 font-weight: 700;
72 }
73 [data-composition-id="04-benefits-flowchart"] .benefit {
74 font-size: 96px;
75 letter-spacing: -0.02em;
76 line-height: 1.1;
77 background: linear-gradient(180deg, #ffffff 0%, #bbbbbb 100%);
78 -webkit-background-clip: text;
79 -webkit-text-fill-color: transparent;
80 background-clip: text;
81 color: transparent;
82 text-shadow: 0 0 40px var(--node-glow);
83 opacity: 0;
84 transform: translateX(60px);
85 will-change: opacity, transform;
86 }
87 [data-composition-id="04-benefits-flowchart"] .flow {
88 position: absolute; inset: 0;
89 width: 100%; height: 100%;
90 opacity: 0;
91 }
92 [data-composition-id="04-benefits-flowchart"] .edge {
93 stroke-dasharray: 240;
94 stroke-dashoffset: 240;
95 filter: drop-shadow(0 0 6px var(--energy));
96 }
97 [data-composition-id="04-benefits-flowchart"] .node {
98 filter: drop-shadow(0 0 12px var(--node-glow));
99 }
100 [data-composition-id="04-benefits-flowchart"] .comet {
101 position: absolute;
102 top: 42%; left: 0;
103 width: 70%; height: 14px;
104 background: linear-gradient(90deg, transparent 0%, rgba(161,85,255,0.95) 40%, #ffffff 55%, transparent 100%);
105 filter: blur(10px);
106 transform: translate(-150%, 0);
107 opacity: 0;
108 }
109 [data-composition-id="04-benefits-flowchart"] .vignette {
110 position: absolute; inset: 0; pointer-events: none;
111 background: radial-gradient(ellipse at center, transparent 30%, rgba(0,0,0,0.95) 95%);
112 opacity: 0.7;
113 }
114 [data-composition-id="04-benefits-flowchart"] .grain {
115 position: absolute; inset: 0; pointer-events: none;
116 opacity: 0.08;
117 background-image:
118 radial-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),
119 radial-gradient(rgba(255,255,255,0.02) 1px, transparent 1px);
120 background-size: 3px 3px, 5px 5px;
121 }
122 </style>
123
124 <script>
125 (() => {
126 const SLOT = 4.8;
127 const tl = gsap.timeline({ paused: true });
128 const sel = (q) => `[data-composition-id="04-benefits-flowchart"] ${q}`;
129
130 tl.set(sel('.comet'), { opacity: 1 }, 0);
131 tl.fromTo(sel('.comet'),
132 { xPercent: -150 }, { xPercent: 250, duration: 0.4, ease: 'power3.in' }, 0);
133 tl.to(sel('.comet'), { opacity: 0, duration: 0.2 }, 0.4);
134
135 tl.to(sel('.b-fast'),
136 { opacity: 1, x: 0, duration: 0.35, ease: 'expo.out' }, 0.25);
137
138 tl.to(sel('.flow'), { opacity: 1, duration: 0.4, ease: 'power2.out' }, 1.2);
139
140 tl.to(sel('.edges .edge'),
141 { strokeDashoffset: 0, duration: 0.6, stagger: 0.05, ease: 'power2.out' }, 1.2);
142
143 tl.to(sel('.b-focused'),
144 { opacity: 1, x: 0, duration: 0.35, ease: 'expo.out' }, 2.3);
145 tl.to(sel('.stage-04'),
146 { '--edge': '#5db4ff', '--node-glow': 'rgba(91,180,255,0.7)', '--energy': '#5db4ff',
147 duration: 0.5, ease: 'power2.inOut' }, 2.3);
148
149 tl.to(sel('.b-ai'),
150 { opacity: 1, x: 0, duration: 0.4, ease: 'expo.out' }, 3.3);
151 tl.to(sel('.stage-04'),
152 { '--edge': '#FFD84A', '--node-glow': 'rgba(255,148,48,0.7)', '--energy': '#FFD84A',
153 duration: 0.6, ease: 'power2.inOut' }, 3.3);
154
155 tl.to(sel('.b-ai'),
156 { textShadow: '0 0 80px rgba(255,216,74,0.8), 0 0 40px rgba(255,148,48,0.6)',
157 duration: 0.4, ease: 'power2.out' }, 3.5);
158
159 tl.to({}, { duration: SLOT }, 0);
160 window.__timelines = window.__timelines || {};
161 window.__timelines['04-benefits-flowchart'] = tl;
162 })();
163 </script>
164 </div>
165 </template>
166
166 lines HTML