返回 html-video
index.html
1 <!doctype html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8" />
5 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6 <title>Hyperframes - Play Mode</title>
7 <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
8 <style>
9 body,
10 html {
11 margin: 0;
12 padding: 0;
13 width: 1920px;
14 height: 1080px;
15 overflow: hidden;
16 background-color: #ffffff;
17 font-family: "Nunito", sans-serif;
18 }
19
20 #main-composition {
21 width: 1920px;
22 height: 1080px;
23 position: relative;
24 }
25
26 #bg-comp,
27 #aroll-comp,
28 #intro-comp,
29 #stats-comp,
30 #captions-comp {
31 position: absolute;
32 top: 0;
33 left: 0;
34 width: 100%;
35 height: 100%;
36 }
37
38 #bg-comp {
39 z-index: 1;
40 }
41
42 #aroll-comp {
43 z-index: 10;
44 }
45
46 #intro-comp {
47 z-index: 100;
48 }
49
50 #stats-comp {
51 z-index: 150;
52 }
53
54 #captions-comp {
55 z-index: 200;
56 }
57
58 #aroll-container {
59 position: absolute;
60 width: 100%;
61 height: 100%;
62 display: flex;
63 justify-content: center;
64 align-items: center;
65 z-index: 0;
66 }
67
68 #short_mag_cut {
69 border-radius: 16px;
70 box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
71 border: 8px solid #ffffff;
72 }
73
74 #background-layer {
75 position: absolute;
76 top: 0;
77 left: 0;
78 width: 100%;
79 height: 100%;
80 background-color: #ffffff;
81 z-index: 0;
82 }
83 </style>
84 <link
85 href="https://fonts.googleapis.com/css2?family=Nunito:wght@900&display=swap"
86 rel="stylesheet"
87 />
88 </head>
89 <body>
90 <div
91 id="main-composition"
92 data-composition-id="main-video"
93 data-start="0"
94 data-duration="__VIDEO_DURATION__"
95 data-width="1920"
96 data-height="1080"
97 >
98 <!-- Background Layer Composition -->
99 <div
100 id="bg-comp"
101 data-composition-id="background"
102 data-start="0"
103 data-duration="__VIDEO_DURATION__"
104 data-width="1920"
105 data-height="1080"
106 data-track-index="1"
107 >
108 <div id="background-layer"></div>
109 <style>
110 #background-layer {
111 position: absolute;
112 top: 0;
113 left: 0;
114 width: 100%;
115 height: 100%;
116 background-color: #ffffff;
117 }
118 </style>
119 <script>
120 (function () {
121 const tl = gsap.timeline({ paused: true });
122 const bg = document.getElementById("background-layer");
123 // Sync with A-roll framing 3 (4.659s)
124 tl.to(bg, { backgroundColor: "#0057FF", duration: 0.5 }, 4.659);
125 // Sync with A-roll framing 4 (8.88s)
126 tl.to(bg, { backgroundColor: "#FFFFFF", duration: 0.5 }, 8.88);
127 window.__timelines["background"] = tl;
128 })();
129 </script>
130 </div>
131
132 <!-- A-roll Layer Composition -->
133 <div
134 id="aroll-comp"
135 data-composition-id="aroll-layer"
136 data-duration="__VIDEO_DURATION__"
137 data-width="1920"
138 data-height="1080"
139 data-track-index="10"
140 >
141 <div id="aroll-container">
142 <video
143 id="short_mag_cut"
144 src="__VIDEO_SRC__"
145 muted
146 playsinline
147 data-start="0"
148 data-duration="__VIDEO_DURATION__"
149 data-track-index="1"
150 style="width: 100%; height: auto"
151 ></video>
152 </div>
153 <audio
154 id="a-roll-audio"
155 src="__VIDEO_SRC__"
156 data-start="0"
157 data-duration="__VIDEO_DURATION__"
158 data-track-index="5"
159 data-volume="1"
160 ></audio>
161 <style>
162 #aroll-container {
163 position: absolute;
164 width: 100%;
165 height: 100%;
166 display: flex;
167 justify-content: center;
168 align-items: center;
169 }
170 #short_mag_cut {
171 border-radius: 16px;
172 box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
173 border: 8px solid #ffffff;
174 }
175 </style>
176 <script>
177 (function () {
178 const tl = gsap.timeline({ paused: true });
179 const container = document.getElementById("aroll-container");
180 gsap.set(container, { y: -1100, scale: 0.8 });
181 tl.to(container, { y: 0, duration: 1.2, ease: "elastic.out(1, 0.6)" }, 0);
182 tl.to(container, { scale: 1.4, x: -300, duration: 1, ease: "back.out(1.7)" }, 1.839);
183 tl.to(container, { scale: 0.7, x: 400, duration: 1, ease: "back.out(1.7)" }, 4.659);
184 tl.to(container, { scale: 0.9, x: 0, duration: 1, ease: "back.out(1.7)" }, 8.88);
185 window.__timelines["aroll-layer"] = tl;
186 })();
187 </script>
188 </div>
189
190 <!-- Compositions -->
191 <div
192 id="intro-comp"
193 data-composition-id="intro"
194 data-composition-src="compositions/intro.html"
195 data-start="0"
196 data-duration="__VIDEO_DURATION__"
197 data-width="1920"
198 data-height="1080"
199 data-track-index="100"
200 ></div>
201 <div
202 id="captions-comp"
203 data-composition-id="captions"
204 data-composition-src="compositions/captions.html"
205 data-start="0"
206 data-duration="__VIDEO_DURATION__"
207 data-width="1920"
208 data-height="1080"
209 data-track-index="200"
210 ></div>
211 <div
212 id="stats-comp"
213 data-composition-id="stats"
214 data-composition-src="compositions/stats.html"
215 data-start="0"
216 data-duration="__VIDEO_DURATION__"
217 data-width="1920"
218 data-height="1080"
219 data-track-index="150"
220 ></div>
221
222 <script>
223 window.__timelines = window.__timelines || {};
224 const tl = gsap.timeline({ paused: true });
225 window.__timelines["main-video"] = tl;
226 </script>
227 </div>
228 </body>
229 </html>
230
230 lines HTML