Skip to content

Commit 03b03a0

Browse files
committed
Add glitch & blur to heading reveal
1 parent 2187241 commit 03b03a0

File tree

3 files changed

+58
-8
lines changed

3 files changed

+58
-8
lines changed

www/src/lib/components/heading.svelte

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,60 @@ onMount(() => {
8282
}
8383
8484
:global(.line) {
85-
transition: 0.7s cubic-bezier(0.165, 0.84, 0.44, 1);
86-
transition-property: opacity, transform;
85+
--duration: 700ms;
86+
--easing: cubic-bezier(0.165, 0.84, 0.44, 1);
87+
--distance: 0.125em;
88+
--distance-y: 0.0625em;
89+
--rotation: rotateX(75deg) rotateY(10deg) rotateZ(-9deg);
90+
91+
position: relative;
92+
transition: var(--duration) var(--easing);
93+
transition-property: opacity, filter, transform, translate;
8794
transition-delay: var(--delay, 0);
95+
color: #1061ff;
96+
97+
&::before,
98+
&::after {
99+
position: absolute;
100+
inset-inline-start: 0;
101+
/* z-index: -1; */
102+
content: attr(data-text);
103+
mix-blend-mode: plus-lighter;
104+
pointer-events: none;
105+
user-select: none;
106+
transition: var(--duration) var(--easing);
107+
transition-property: opacity, filter, transform, translate;
108+
109+
@starting-style {
110+
opacity: 0;
111+
filter: blur(8px);
112+
/* translate: var(--distance); */
113+
}
114+
}
115+
116+
&::before {
117+
color: #14c7ff;
118+
transition-delay: calc(var(--delay, 0));
119+
@starting-style {
120+
transform: var(--rotation);
121+
/* translate: calc(var(--distance) * -2) calc(var(--distance-y) * 2); */
122+
}
123+
}
124+
125+
&::after {
126+
color: #ff6231;
127+
transition-delay: calc(var(--delay, 0));
128+
@starting-style {
129+
transform: var(--rotation);
130+
/* translate: calc(var(--distance) * -3) calc(var(--distance-y) * 3); */
131+
}
132+
}
88133
89134
@starting-style {
90135
opacity: 0;
91-
transform: rotateX(75deg) rotateY(10deg) rotateZ(-9deg);
136+
filter: blur(8px);
137+
transform: var(--rotation);
138+
/* translate: calc(var(--distance) * -1) var(--distance-y); */
92139
}
93140
}
94141
</style>

www/src/lib/components/sub-heading.svelte

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,17 @@ let show = $derived(shouldShow === undefined ? true : shouldShow)
4040

4141
<style>
4242
.text {
43-
transition:
44-
opacity 0.7s cubic-bezier(0.165, 0.84, 0.44, 1),
45-
transform 0.7s cubic-bezier(0.165, 0.84, 0.44, 1);
43+
--duration: 700ms;
44+
--easing: cubic-bezier(0.165, 0.84, 0.44, 1);
45+
46+
transition: var(--duration) var(--easing);
47+
transition-property: opacity, filter, transform;
4648
transition-delay: var(--delay, 0);
4749
}
4850
4951
.hide .text {
5052
opacity: 0;
53+
filter: blur(8px);
5154
transform: rotateX(75deg) rotateY(10deg) rotateZ(-9deg);
5255
}
5356
</style>

www/src/lib/wrap-lines.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export function wrapLines(element) {
5151

5252
if (newTop > lastTop) {
5353
if (lineWords.length > 0) {
54-
markup += `<span ${lineClass} style="--delay: ${
54+
markup += `<span ${lineClass} data-text="${lineWords.join(' ')}" style="--delay: ${
5555
100 * lineNumber
5656
}ms">${lineWords.join(' ')}</span>`
5757
}
@@ -66,7 +66,7 @@ export function wrapLines(element) {
6666
if (0 < index && child.nodeName !== 'BR') markup += ' '
6767

6868
if (index === children.length - 1 && lineWords.length > 0) {
69-
markup += `<span ${lineClass} style="--delay: ${
69+
markup += `<span ${lineClass} data-text="${lineWords.join(' ')}" style="--delay: ${
7070
100 * lineNumber
7171
}ms">${lineWords.join(' ')}</span>`
7272
}

0 commit comments

Comments
 (0)