返回 html-video
03-brand-reveal.html
1 <template id="03-brand-reveal-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=Inter:wght@500;600;700&display=block" rel="stylesheet" />
4
5 <div
6 data-composition-id="03-brand-reveal"
7 data-start="0"
8 data-duration="2"
9 data-width="1920"
10 data-height="1080"
11 >
12 <div class="stage-03">
13 <div class="grid-floor"></div>
14
15 <div class="lockup">
16 <div class="symbol-slot">
17 <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
18 <defs>
19 <linearGradient id="grad-03" x1="0" y1="0" x2="1" y2="1">
20 <stop offset="0%" stop-color="#5E6AD2"/>
21 <stop offset="100%" stop-color="#A9B0F0"/>
22 </linearGradient>
23 </defs>
24 <path d="M 25 18 L 75 18 L 75 34 L 41 34 L 41 82 L 25 82 Z" fill="url(#grad-03)" />
25 </svg>
26 </div>
27 <div class="wordmark">BRANDNAME</div>
28 <div class="shimmer"></div>
29 </div>
30
31 <div class="vignette"></div>
32 <div class="grain"></div>
33 </div>
34
35 <style>
36 [data-composition-id="03-brand-reveal"] {
37 position: absolute; inset: 0; overflow: hidden; background: #000;
38 }
39 [data-composition-id="03-brand-reveal"] .stage-03 { position: absolute; inset: 0; }
40 [data-composition-id="03-brand-reveal"] .grid-floor {
41 position: absolute; inset: 0;
42 transform: perspective(900px) rotateX(60deg) translateY(25%);
43 background:
44 repeating-linear-gradient(0deg, rgba(255,255,255,0.04) 0 1px, transparent 1px 80px),
45 repeating-linear-gradient(90deg, rgba(255,255,255,0.04) 0 1px, transparent 1px 80px);
46 background-color: #000;
47 }
48 [data-composition-id="03-brand-reveal"] .lockup {
49 position: absolute;
50 top: 50%; left: 50%;
51 transform: translate(-50%, -50%);
52 display: flex;
53 align-items: center;
54 gap: 32px;
55 }
56 [data-composition-id="03-brand-reveal"] .symbol-slot {
57 width: 120px; height: 120px;
58 filter: drop-shadow(0 0 40px rgba(169,176,240,0.6));
59 }
60 [data-composition-id="03-brand-reveal"] .symbol-slot svg { width: 100%; height: 100%; }
61 [data-composition-id="03-brand-reveal"] .wordmark {
62 font-family: "Inter", sans-serif;
63 font-weight: 600;
64 font-size: 180px;
65 letter-spacing: -0.04em;
66 background: linear-gradient(180deg, #ffffff 0%, #cccccc 60%, #888888 100%);
67 -webkit-background-clip: text;
68 -webkit-text-fill-color: transparent;
69 background-clip: text;
70 color: transparent;
71 text-shadow: 0 0 60px rgba(255,255,255,0.3);
72 opacity: 0;
73 transform: translateY(40px);
74 will-change: opacity, transform;
75 }
76 [data-composition-id="03-brand-reveal"] .shimmer {
77 position: absolute;
78 top: 0; left: 0;
79 width: 200px; height: 100%;
80 background: linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.45) 50%, transparent 100%);
81 filter: blur(4px);
82 transform: translateX(-200%);
83 opacity: 0;
84 mix-blend-mode: screen;
85 pointer-events: none;
86 }
87 [data-composition-id="03-brand-reveal"] .vignette {
88 position: absolute; inset: 0; pointer-events: none;
89 background: radial-gradient(ellipse at center, transparent 30%, rgba(0,0,0,0.95) 95%);
90 opacity: 0.75;
91 }
92 [data-composition-id="03-brand-reveal"] .grain {
93 position: absolute; inset: 0; pointer-events: none;
94 opacity: 0.08;
95 background-image:
96 radial-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),
97 radial-gradient(rgba(255,255,255,0.02) 1px, transparent 1px);
98 background-size: 3px 3px, 5px 5px;
99 }
100 </style>
101
102 <script>
103 (() => {
104 const SLOT = 2;
105 const tl = gsap.timeline({ paused: true });
106 const sel = (q) => `[data-composition-id="03-brand-reveal"] ${q}`;
107
108 tl.to(sel('.wordmark'),
109 { y: 0, opacity: 1, duration: 0.6, ease: 'power3.out' }, 0.15);
110
111 tl.fromTo(sel('.symbol-slot'),
112 { scale: 2.2, opacity: 0 },
113 { scale: 1, opacity: 1, duration: 0.6, ease: 'power3.out' }, 0.05);
114
115 tl.to(sel('.shimmer'),
116 { opacity: 1, duration: 0.1 }, 1.2);
117 tl.to(sel('.shimmer'),
118 { xPercent: 500, duration: 0.7, ease: 'power2.inOut' }, 1.2);
119 tl.to(sel('.shimmer'),
120 { opacity: 0, duration: 0.1 }, 1.85);
121
122 tl.to({}, { duration: SLOT }, 0);
123 window.__timelines = window.__timelines || {};
124 window.__timelines['03-brand-reveal'] = tl;
125 })();
126 </script>
127 </div>
128 </template>
129
129 lines HTML