From a4ddd83f9145dd9c10be107e0b83d1167c0c3878 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Sun, 17 Nov 2024 20:32:46 +0800 Subject: [PATCH] update: preparation for event-driven animation --- package.json | 2 +- .../core/components/lyrics/lyricLine.svelte | 13 ++++------ .../core/components/lyrics/newLyrics.svelte | 24 +++++++++++++++++++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 975c0cd..9ea2937 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aquavox", - "version": "2.5.1", + "version": "2.9.1", "private": false, "module": "index.ts", "type": "module", diff --git a/packages/core/components/lyrics/lyricLine.svelte b/packages/core/components/lyrics/lyricLine.svelte index b5263d1..e521e62 100644 --- a/packages/core/components/lyrics/lyricLine.svelte +++ b/packages/core/components/lyrics/lyricLine.svelte @@ -5,7 +5,7 @@ import type { Spring } from '@core/graphics/spring/spring'; const viewportWidth = document.documentElement.clientWidth; - const blurRatio = viewportWidth > 640 ? 1 : 1.4; + const blurRatio = viewportWidth > 640 ? 1.2 : 1.4; export let line: ScriptItem; export let index: number; @@ -21,7 +21,7 @@ let time = 0; let positionX: number = 0; let positionY: number = 0; - let opacity = 1; + let blur = 0; let stopped = false; let lastPosX: number | undefined = undefined; let lastPosY: number | undefined = undefined; @@ -75,11 +75,6 @@ positionY = pos; }; - export const setCurrent = (isCurrent: boolean) => { - isCurrentLyric = isCurrent; - opacity = isCurrent ? 1 : 0.36; - }; - $: { if (ref && ref.style) { let blurRadius = 0; @@ -92,7 +87,7 @@ blurRadius = Math.min(offset * blurRatio, 16); } if (scrolling) blurRadius = 0; - ref.style.filter = `blur(${blurRadius}px)`; + blur = blurRadius } } @@ -198,7 +193,7 @@ clickMask.style.backgroundColor = 'rgba(255,255,255,.3)'; }} style="transform: translate3d({positionX}px, {positionY}px, 0); - transform-origin: center left; font-family: LyricFont, sans-serif;" + transform-origin: center left; font-family: LyricFont, sans-serif; filter: blur({blur}px)" > { + const progressDelta = progress - lastEventProgress; + const deltaInRange = 0 <= progressDelta && progressDelta <= 0.15; + const deltaTooBig = progressDelta > 0.15; + const deltaIsNegative = progressDelta < 0; + const lyricChanged = currentLyricIndex !== lastEventLyricIndex; + const lyricIndexDeltaTooBig = Math.abs(currentLyricIndex - lastEventLyricIndex) > 1; + if (lyricChanged && !lyricIndexDeltaTooBig && deltaInRange) { + console.log("Event: regular move"); + } + else if (deltaTooBig && lyricChanged) { + console.log("Event: seek forward"); + } + else if (deltaIsNegative && lyricChanged) { + console.log("Event: seek backward"); + } + lastEventLyricIndex = currentLyricIndex; + lastEventProgress = progress; + }); + $effect(() => { if (!lyricsContainer || lyricComponents.length < 0) return; if (progress >= nextUpdate - 0.5 && !scrolling) {