knowyt/client/src/components/ReadySet.vue
2022-08-29 21:23:33 +02:00

159 lines
2.9 KiB
Vue

<template>
<div class="ready-set__container-outer">
<div :class="['ready-set__container-inner', fadeOut]">
<div class="ready-set__box1" />
<div class="ready-set__box2" />
<div class="ready-set__box3" />
<div :class="['ready-set__text', 'ready-set__text__popup', textSize]" :key="text">
{{ text }}
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { computed } from 'vue'
const props = defineProps<{
text: string,
}>()
const fadeOut = computed((): string | null => props.text === '' ? 'ready-set__container-inner__fade-out' : null)
const textSize = computed((): string => {
if (props.text.length < 3) {
return 'ready-set__text__size-big'
} else if (props.text.length < 4) {
return 'ready-set__text__size-medium'
} else if (props.text.length > 5) {
return 'ready-set__text__size-small'
}
})
</script>
<style lang="scss">
@import '~/assets/css/components';
.ready-set {
&__container-outer {
display: flex;
position: relative;
width: 100%;
height: 100%;
align-items: center;
justify-content: center;
}
&__container-inner {
position: relative;
width: 600px;
height: 600px;
overflow: hidden;
&__fade-out {
animation: fade-out 0.3s linear;
animation-fill-mode: forwards;
}
}
&__box1 {
position: absolute;
left: 100px;
top: 100px;
transform: rotate(45deg);
width: 370px;
height: 370px;
background-color: $animationbox-background-color;
border: $animationbox-border;
border-radius: 50px;
z-index: 5;
}
&__box2 {
position: absolute;
left: 90px;
top: 90px;
width: 420px;
height: 420px;
border-radius: 150px;
background-color: $animationbox-animation-color;
animation: spin-rev 5s linear infinite;
z-index: 4;
}
&__box3 {
position: absolute;
left: 90px;
top: 90px;
width: 420px;
height: 420px;
border-radius: 150px;
background-color: $animationbox-animation-color;
z-index: 3;
animation: spin 6s linear infinite;
}
&__text {
position: absolute;
width: 600px;
height: 600px;
line-height: 600px;
font-size: 100px;
font-family: $font-primary;
color: $animationbox-text-color;
text-align: center;
z-index: 10;
&__size-small {
font-size: 80px;
}
&__size-medium {
font-size: 150px;
}
&__size-big {
font-size: 250px;
}
&__popup {
animation: pop 0.5s ease-in-out;
}
}
}
@keyframes spin {
100% {
transform: rotate(360deg);
}
}
@keyframes spin-rev {
100% {
transform: rotate(-360deg);
}
}
@keyframes pop {
0% {
transform: scale(1.7);
}
25% {
transform: scale(2);
}
100% {
transform: scale(1);
}
}
@keyframes fade-out {
25% {
transform: scale(1.2);
}
100% {
transform: scale(0);
}
}
</style>