diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-08 17:41:09 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-08 17:41:09 +0900 |
| commit | 27c2ca50488680595c114dfae6f8de2ec3c48b32 (patch) | |
| tree | 913bad82798e39c40e14d1bbc7fa20683bdf3622 /packages/frontend/src/components/MkPlusOneEffect.vue | |
| parent | :art: (diff) | |
| download | sharkey-27c2ca50488680595c114dfae6f8de2ec3c48b32.tar.gz sharkey-27c2ca50488680595c114dfae6f8de2ec3c48b32.tar.bz2 sharkey-27c2ca50488680595c114dfae6f8de2ec3c48b32.zip | |
feat(client): 🍪👈
Diffstat (limited to 'packages/frontend/src/components/MkPlusOneEffect.vue')
| -rw-r--r-- | packages/frontend/src/components/MkPlusOneEffect.vue | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/packages/frontend/src/components/MkPlusOneEffect.vue b/packages/frontend/src/components/MkPlusOneEffect.vue new file mode 100644 index 0000000000..6a09669a68 --- /dev/null +++ b/packages/frontend/src/components/MkPlusOneEffect.vue @@ -0,0 +1,69 @@ +<template> +<div :class="$style.root" :style="{ zIndex, top: `${y - 64}px`, left: `${x - 64}px` }"> + <span class="text" :class="{ up }">+1</span> +</div> +</template> + +<script lang="ts" setup> +import { onMounted } from 'vue'; +import * as os from '@/os'; + +const props = withDefaults(defineProps<{ + x: number; + y: number; +}>(), { +}); + +const emit = defineEmits<{ + (ev: 'end'): void; +}>(); + +let up = $ref(false); +const zIndex = os.claimZIndex('middle'); +const angle = (45 - (Math.random() * 90)) + 'deg'; + +onMounted(() => { + window.setTimeout(() => { + up = true; + }, 10); + + window.setTimeout(() => { + emit('end'); + }, 1100); +}); +</script> + +<style lang="scss" module> +.root { + pointer-events: none; + position: fixed; + width: 128px; + height: 128px; + + &:global { + > .text { + display: block; + height: 1em; + text-align: center; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + color: #fff; + text-shadow: 0 0 6px #000; + font-size: 18px; + font-weight: bold; + transform: translateY(0px); + transition: transform 1s cubic-bezier(0,.5,0,1), opacity 1s cubic-bezier(.5,0,1,.5); + will-change: opacity, transform; + + &.up { + opacity: 0; + transform: translateY(-50px) rotateZ(v-bind(angle)); + } + } + } +} +</style> |