summaryrefslogtreecommitdiff
path: root/packages/frontend/src/scripts/confetti.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-01-06 13:43:10 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-01-06 13:43:10 +0900
commit3b617fafdd4bd821b0c4e6706a15279d11a24b7b (patch)
treef05f1f3c43ea3db19bb35c696946a0747e48f38b /packages/frontend/src/scripts/confetti.ts
parent:art: (diff)
downloadmisskey-3b617fafdd4bd821b0c4e6706a15279d11a24b7b.tar.gz
misskey-3b617fafdd4bd821b0c4e6706a15279d11a24b7b.tar.bz2
misskey-3b617fafdd4bd821b0c4e6706a15279d11a24b7b.zip
enhance(client): アップデート時にも花火
Diffstat (limited to 'packages/frontend/src/scripts/confetti.ts')
-rw-r--r--packages/frontend/src/scripts/confetti.ts25
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/frontend/src/scripts/confetti.ts b/packages/frontend/src/scripts/confetti.ts
new file mode 100644
index 0000000000..2a9f393904
--- /dev/null
+++ b/packages/frontend/src/scripts/confetti.ts
@@ -0,0 +1,25 @@
+import _confetti from 'canvas-confetti';
+import * as os from '@/os';
+
+export function confetti() {
+ const duration = 1000 * 5;
+ const animationEnd = Date.now() + duration;
+ const defaults = { startVelocity: 30, spread: 360, ticks: 60, zIndex: os.claimZIndex('high') };
+
+ function randomInRange(min, max) {
+ return Math.random() * (max - min) + min;
+ }
+
+ const interval = setInterval(() => {
+ const timeLeft = animationEnd - Date.now();
+
+ if (timeLeft <= 0) {
+ return clearInterval(interval);
+ }
+
+ const particleCount = 50 * (timeLeft / duration);
+ // since particles fall down, start a bit higher than random
+ _confetti(Object.assign({}, defaults, { particleCount, origin: { x: randomInRange(0.1, 0.3), y: Math.random() - 0.2 } }));
+ _confetti(Object.assign({}, defaults, { particleCount, origin: { x: randomInRange(0.7, 0.9), y: Math.random() - 0.2 } }));
+ }, 250);
+}