diff --git a/package.json b/package.json index 344f62e..6f4794c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aquavox", - "version": "1.10.0", + "version": "1.10.1", "private": false, "scripts": { "dev": "vite dev", diff --git a/src/lib/components/interactiveBox.svelte b/src/lib/components/interactiveBox.svelte index 4101524..d17dfeb 100644 --- a/src/lib/components/interactiveBox.svelte +++ b/src/lib/components/interactiveBox.svelte @@ -2,7 +2,7 @@ import formatDuration from '$lib/formatDuration'; import { onMount } from 'svelte'; import userAdjustingProgress from '$lib/state/userAdjustingProgress'; - import progressBarRaw from '$lib/state/progressBarRaw'; + import progressBarSlideValue from '$lib/state/progressBarSlideValue'; export let name: string; export let singer: string = ''; @@ -18,22 +18,39 @@ export let hasLyrics: boolean; let progressBar: HTMLDivElement; - let volumeBar: HTMLInputElement; + let volumeBar: HTMLDivElement; let showInfoTop: boolean = false; let isInfoTopOverflowing = false; let songInfoTopContainer: HTMLDivElement; let songInfoTopContent: HTMLSpanElement; + let lastTouchProgress: number; + let userAdjustingVolume = false; const mql = window.matchMedia('(max-width: 1280px)'); - function volumeBarOnChange(e: any) { - adjustVolume(e.target.value); - localStorage.setItem('volume', e.target.value); + function volumeBarOnChange(e: MouseEvent) { + const value = e.offsetX / volumeBar.getBoundingClientRect().width; + adjustVolume(value); + localStorage.setItem('volume', value.toString()); + } + + function volumeBarChangeTouch(e: TouchEvent) { + const value = turncate( + e.touches[0].clientX - volumeBar.getBoundingClientRect().x, + 0, + volumeBar.getBoundingClientRect().width + ) / volumeBar.getBoundingClientRect().width; + adjustVolume(value); + localStorage.setItem('volume', value.toString()); } function progressBarOnClick(e: MouseEvent) { adjustProgress(e.offsetX / progressBar.getBoundingClientRect().width); - progressBarRaw.set(e.offsetX / progressBar.getBoundingClientRect().width * duration); + progressBarSlideValue.set((e.offsetX / progressBar.getBoundingClientRect().width) * duration); + } + + function turncate(value: number, min: number, max: number) { + return Math.min(Math.max(value, min), max); } onMount(() => { @@ -94,6 +111,30 @@ adjustDisplayProgress(e.offsetX / progressBar.getBoundingClientRect().width); } }} + on:touchstart={(e) => { + if (e.cancelable) { + e.preventDefault(); + } + userAdjustingProgress.set(true); + }} + on:touchmove={(e) => { + e.preventDefault(); + userAdjustingProgress.set(true); + if ($userAdjustingProgress) { + lastTouchProgress = + turncate( + e.touches[0].clientX - progressBar.getBoundingClientRect().x, + 0, + progressBar.getBoundingClientRect().width + ) / progressBar.getBoundingClientRect().width; + adjustDisplayProgress(lastTouchProgress); + } + }} + on:touchend={(e) => { + e.preventDefault(); + userAdjustingProgress.set(false); + adjustProgress(lastTouchProgress); + }} on:mouseup={() => { userAdjustingProgress.set(false); }} @@ -127,7 +168,7 @@
+
LyricIndex: {currentLyricIndex} PositionIndex: {currentPositionIndex} AnimationIndex:{currentAnimationIndex} - NextUpdate: {Math.floor(nextUpdate / 60)}m {Math.round((nextUpdate % 60) * 100) / 100}s + NextUpdate: {nextUpdate} + Progress: {progress.toFixed(2)} + lastAdjustProgress: {lastAdjustProgress}
{/if} {#each lyrics as lyric, i} diff --git a/src/lib/state/progressBarSlideValue.ts b/src/lib/state/progressBarSlideValue.ts new file mode 100644 index 0000000..ccd863a --- /dev/null +++ b/src/lib/state/progressBarSlideValue.ts @@ -0,0 +1,3 @@ +import { writable } from 'svelte/store'; +const progressBarSlideValue = writable(0); +export default progressBarSlideValue; \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 4b975f6..aeef539 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -77,7 +77,7 @@- AquaVox 1.10.0 · 早期公开预览 · 源代码参见 + AquaVox 1.10.1 · 早期公开预览 · 源代码参见 GitHub
导入音乐