From e7912c90a229fcd63a11af613fe02f864f964393 Mon Sep 17 00:00:00 2001 From: Pihkaal Date: Thu, 13 Nov 2025 13:52:40 +0100 Subject: [PATCH] feat: animate home screen buttons on click --- .../Home/BottomScreen/Buttons/Buttons.vue | 47 +++++++++++++++++-- .../Buttons/DownloadPlayButton.vue | 2 + .../Home/BottomScreen/Buttons/GameButton.vue | 2 + .../BottomScreen/Buttons/PictochatButton.vue | 2 + .../Home/BottomScreen/Buttons/Selector.vue | 3 ++ package.json | 1 + pnpm-lock.yaml | 11 +++++ 7 files changed, 63 insertions(+), 5 deletions(-) diff --git a/app/components/Home/BottomScreen/Buttons/Buttons.vue b/app/components/Home/BottomScreen/Buttons/Buttons.vue index b35fb1c..c0ac652 100644 --- a/app/components/Home/BottomScreen/Buttons/Buttons.vue +++ b/app/components/Home/BottomScreen/Buttons/Buttons.vue @@ -1,4 +1,5 @@ diff --git a/app/components/Home/BottomScreen/Buttons/DownloadPlayButton.vue b/app/components/Home/BottomScreen/Buttons/DownloadPlayButton.vue index 548c36f..8d93d1b 100644 --- a/app/components/Home/BottomScreen/Buttons/DownloadPlayButton.vue +++ b/app/components/Home/BottomScreen/Buttons/DownloadPlayButton.vue @@ -2,6 +2,7 @@ const props = defineProps<{ x: number; y: number; + opacity: number; }>(); const buttonImage = useTemplateRef("buttonImage"); @@ -9,6 +10,7 @@ const buttonImage = useTemplateRef("buttonImage"); useRender((ctx) => { if (!buttonImage.value) return; + ctx.globalAlpha = props.opacity / 100; ctx.drawImage(buttonImage.value, props.x, props.y); }); diff --git a/app/components/Home/BottomScreen/Buttons/GameButton.vue b/app/components/Home/BottomScreen/Buttons/GameButton.vue index 40c912c..6f85aa5 100644 --- a/app/components/Home/BottomScreen/Buttons/GameButton.vue +++ b/app/components/Home/BottomScreen/Buttons/GameButton.vue @@ -2,6 +2,7 @@ const props = defineProps<{ x: number; y: number; + opacity: number; }>(); const buttonImage = useTemplateRef("buttonImage"); @@ -9,6 +10,7 @@ const buttonImage = useTemplateRef("buttonImage"); useRender((ctx) => { if (!buttonImage.value) return; + ctx.globalAlpha = props.opacity / 100; ctx.drawImage(buttonImage.value, props.x, props.y); }); diff --git a/app/components/Home/BottomScreen/Buttons/PictochatButton.vue b/app/components/Home/BottomScreen/Buttons/PictochatButton.vue index 23f75e5..8d2f881 100644 --- a/app/components/Home/BottomScreen/Buttons/PictochatButton.vue +++ b/app/components/Home/BottomScreen/Buttons/PictochatButton.vue @@ -2,6 +2,7 @@ const props = defineProps<{ x: number; y: number; + opacity: number; }>(); const buttonImage = useTemplateRef("buttonImage"); @@ -9,6 +10,7 @@ const buttonImage = useTemplateRef("buttonImage"); useRender((ctx) => { if (!buttonImage.value) return; + ctx.globalAlpha = props.opacity / 100; ctx.drawImage(buttonImage.value, props.x, props.y); }); diff --git a/app/components/Home/BottomScreen/Buttons/Selector.vue b/app/components/Home/BottomScreen/Buttons/Selector.vue index 01e6fbb..f015062 100644 --- a/app/components/Home/BottomScreen/Buttons/Selector.vue +++ b/app/components/Home/BottomScreen/Buttons/Selector.vue @@ -4,6 +4,7 @@ const props = defineProps<{ y: number; width: number; height: number; + opacity: number; }>(); const cornerImage = useTemplateRef("cornerImage"); @@ -45,6 +46,8 @@ useRender((ctx) => { const w = Math.floor(currentWidth); const h = Math.floor(currentHeight); + ctx.globalAlpha = props.opacity / 100; + ctx.drawImage(cornerImage.value, x, y); ctx.save(); diff --git a/package.json b/package.json index 50c4bce..5adf159 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "lint": "eslint --fix --cache ." }, "dependencies": { + "gsap": "^3.13.0", "nuxt": "^4.2.1", "vue": "^3.5.22", "vue-router": "^4.6.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0c30874..ca8a441 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,9 @@ settings: importers: .: dependencies: + gsap: + specifier: ^3.13.0 + version: 3.13.0 nuxt: specifier: ^4.2.1 version: 4.2.1(@parcel/watcher@2.5.1)(@vue/compiler-sfc@3.5.24)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.1)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.2(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.1))(yaml@2.8.1) @@ -3698,6 +3701,12 @@ packages: integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, } + gsap@3.13.0: + resolution: + { + integrity: sha512-QL7MJ2WMjm1PHWsoFrAQH/J8wUeqZvMtHO58qdekHpCfhvhSL4gSiz6vJf5EeMP0LOn3ZCprL2ki/gjED8ghVw==, + } + gzip-size@7.0.0: resolution: { @@ -8869,6 +8878,8 @@ snapshots: graphemer@1.4.0: {} + gsap@3.13.0: {} + gzip-size@7.0.0: dependencies: duplexer: 0.1.2