Skip to content

Commit d077fe7

Browse files
committed
feat: adding CyberpunkGlitch animation randomness
1 parent 0c521a2 commit d077fe7

File tree

1 file changed

+24
-12
lines changed
  • packages/components/src/components/CyberpunkGlitch/src

1 file changed

+24
-12
lines changed

packages/components/src/components/CyberpunkGlitch/src/index.vue

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
<style lang="scss" scoped>
22
.text-container {
33
--slice-0: inset(50% 50% 50% 50%);
4-
--slice-1: inset(15% 0 65% 0);
5-
--slice-2: inset(30% 0 50% 0);
6-
--slice-3: inset(50% 0 35% 0);
7-
--slice-4: inset(60% 0 20% 0);
8-
--slice-5: inset(80% 0 10% 0);
94
105
--slice-shadow-1: -1px -1px 0 #F8F005, 1px 1px 0 #00E6F6;
116
--slice-shadow-2: -2px -2px 0 #F8F005, 2px 2px 0 #00E6F6;
@@ -36,40 +31,40 @@
3631
@keyframes glitch {
3732
0% {
3833
clip-path: var(--slice-1);
39-
transform: translate(0, -5px);
34+
transform: var(--translate-1);
4035
}
4136
4237
20% {
4338
clip-path: var(--slice-5);
44-
transform: translate(10px, -5px);
39+
transform: var(--translate-5);
4540
}
4641
4742
40% {
4843
clip-path: var(--slice-2);
49-
transform: translate(0, 0);
44+
transform: var(--translate-2);
5045
}
5146
5247
60% {
5348
clip-path: var(--slice-5);
54-
transform: translate(-10px, 5px);
49+
transform: var(--translate-5);
5550
text-shadow: var(--slice-shadow-2);
5651
}
5752
5853
80% {
5954
clip-path: var(--slice-3);
60-
transform: translate(3px, 0);
55+
transform: var(--translate-3);
6156
}
6257
6358
100% {
6459
clip-path: var(--slice-4);
65-
transform: translate(10px, 0);
60+
transform: var(--translate-4);
6661
text-shadow: var(--slice-shadow-2);
6762
}
6863
}
6964
</style>
7065

7166
<template>
72-
<div class="text-container" pr>
67+
<div ref="textContainer" class="text-container" pr>
7368
<div
7469
pr class="text"
7570
:class="isPlaying ? 'animate-glitch animate-flash animate-duration-300 animate-count-infinite' : ''"
@@ -95,13 +90,30 @@ const props = withDefaults(defineProps<{
9590
9691
})
9792
93+
const container = useTemplateRef<HTMLDivElement>('textContainer')
94+
9895
const isPlaying = ref(false)
9996
10097
onMounted(() => {
10198
playAnimate()
10299
})
103100
104101
async function playAnimate() {
102+
if (container.value) {
103+
for (let i = 1; i <= 5; i++) {
104+
const left = _random(10, 80)
105+
const right = 100 - left - _random(5, 20)
106+
container.value.style.setProperty(
107+
`--slice-${i}`,
108+
`inset(${left}% 0 ${right}% 0)`
109+
)
110+
container.value.style.setProperty(
111+
`--translate-${i}`,
112+
`translate(${_random(-15, 15)}px, ${_random(-5, 5)}px)`
113+
)
114+
}
115+
}
116+
105117
isPlaying.value = true
106118
107119
const playTime = _random(200, 1200)

0 commit comments

Comments
 (0)