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