diff --git a/packages/frontend/src/components/MkLightbox.item.vue b/packages/frontend/src/components/MkLightbox.item.vue index 589e7433f4..91751f16b5 100644 --- a/packages/frontend/src/components/MkLightbox.item.vue +++ b/packages/frontend/src/components/MkLightbox.item.vue @@ -16,7 +16,7 @@ SPDX-License-Identifier: AGPL-3.0-only @pointerup.passive="onPointerup" @pointercancel.passive="cancelPointerGesture" @touchstart.passive="onTouchstart" - @touchmove.passive="onTouchmove" + @touchmove="onTouchmove" @touchcancel.passive="cancelPointerGesture" @contextmenu="cancelPointerGesture" @wheel="onWheel" @@ -721,6 +721,13 @@ function onTouchstart(ev: TouchEvent) { function onTouchmove(ev: TouchEvent) { doubleTapDetector.onTouchmove(ev); + + // スワイプ操作中は、ブラウザがタッチを慣性スクロールとして認識するのを防ぐためにpreventDefaultする必要がある + // touch-action: noneが指定されているが、それだけではブラウザによっては慣性スクロールが発生した扱いになり、 + // その後のタップが慣性スクロールを止めるためのタップという扱いで握りつぶされてしまうことがあるので必要 + if (isVerticalSwiping || isHorizontalSwiping || isZooming.value || pointerEventCache.size > 1) { + ev.preventDefault(); + } } //#region inertia