From d5609abf25fa4c0b6773d123ed41577b7de9b0b2 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Thu, 9 Jul 2026 22:02:37 +0900 Subject: [PATCH] wip --- .../src/components/MkImageGallery.item.vue | 48 +++++++++++++++---- .../src/components/MkImageGallery.vue | 38 +++++++-------- .../frontend/src/components/MkMediaList.vue | 3 +- 3 files changed, 58 insertions(+), 31 deletions(-) diff --git a/packages/frontend/src/components/MkImageGallery.item.vue b/packages/frontend/src/components/MkImageGallery.item.vue index 1c66f5ac17..30af595707 100644 --- a/packages/frontend/src/components/MkImageGallery.item.vue +++ b/packages/frontend/src/components/MkImageGallery.item.vue @@ -12,17 +12,30 @@ SPDX-License-Identifier: AGPL-3.0-only @pointerup="onPointerup" @touchstart="onTouchstart" @touchmove="onTouchmove" + @wheel="onWheel" >
+ +
+
+
@@ -34,9 +47,10 @@ import { i18n } from '@/i18n.js'; import { makeDoubleTapDetector } from '@/utility/double-tap.js'; import { beginAnimation, easing_easeInOutQuad } from '@/utility/animation.js'; -type Image = { +export type Image = { id: string; - src: string; + url: string; + thumbnailUrl: string; width: number; height: number; sourceElement?: HTMLElement; @@ -44,6 +58,7 @@ type Image = { const props = withDefaults(defineProps<{ image: Image; + activated: boolean; }>(), { }); @@ -58,6 +73,8 @@ const emit = defineEmits<{ const rootEl = useTemplateRef('rootEl'); const imageEl = useTemplateRef('imageEl'); +const originalImageLoaded = ref(false); + const padding = 30; const ANIMATION_DURATION = 200; @@ -217,7 +234,7 @@ let pointerVec = { x: 0, y: 0 }; function onPointerdown(ev: PointerEvent) { pointerEventCache.set(ev.pointerId, ev); - imageEl.value.setPointerCapture(ev.pointerId); + rootEl.value.setPointerCapture(ev.pointerId); isDragging = true; lastX = ev.clientX; @@ -298,7 +315,7 @@ function onPointermove(ev: PointerEvent) { function onPointerup(ev: PointerEvent) { pointerEventCache.delete(ev.pointerId); - imageEl.value.releasePointerCapture(ev.pointerId); + rootEl.value.releasePointerCapture(ev.pointerId); prevTwoTouchPointsDistance = 0; isDragging = false; if (currentPointerId === ev.pointerId) { @@ -396,5 +413,20 @@ onBeforeUnmount(() => { display: block; -webkit-touch-callout: none; user-select: none; + position: absolute; + top: 0; + left: 0; +} + +.loading { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 2; + display: grid; + place-items: center; + pointer-events: none; } diff --git a/packages/frontend/src/components/MkImageGallery.vue b/packages/frontend/src/components/MkImageGallery.vue index ea30694e8e..37c758f367 100644 --- a/packages/frontend/src/components/MkImageGallery.vue +++ b/packages/frontend/src/components/MkImageGallery.vue @@ -8,9 +8,10 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+