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 ;
3631@keyframes glitch {
3732 0% {
3833 clip-path : var (--slice-1 );
39- transform : translate ( 0 , -5 px );
34+ transform : var ( --translate-1 );
4035 }
4136
4237 20% {
4338 clip-path : var (--slice-5 );
44- transform : translate ( 10 px , -5 px );
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 ( -10 px , 5 px );
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 ( 3 px , 0 );
55+ transform : var ( --translate-3 );
6156 }
6257
6358 100% {
6459 clip-path : var (--slice-4 );
65- transform : translate ( 10 px , 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+
9895const isPlaying = ref (false )
9996
10097onMounted (() => {
10198 playAnimate ()
10299})
103100
104101async 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