diff --git a/packages/frontend/src/components/MkImageGallery.item.vue b/packages/frontend/src/components/MkImageGallery.item.vue index 3aa36172bb..d4969e75f8 100644 --- a/packages/frontend/src/components/MkImageGallery.item.vue +++ b/packages/frontend/src/components/MkImageGallery.item.vue @@ -206,7 +206,7 @@ function calcContentRenderingSize(content: Content) { } const contentRenderingSize = calcContentRenderingSize(props.content); -const contentRenderingRect = contentRenderingSize != null ? { +const getContentRenderingRect = () => contentRenderingSize != null ? { left: (window.innerWidth - contentRenderingSize.width + padding.left - padding.right) / 2, top: (window.innerHeight - contentRenderingSize.height + padding.top - padding.bottom) / 2, width: contentRenderingSize.width, @@ -217,6 +217,7 @@ const transform = ref({ x: 0, y: 0, scale: 1 }); // 元のimg要素の位置・サイズ(とobject-fitの設定値)を取得して、そこからneutralの位置にアニメーションするためのscaleとtranslationを計算する function getScaleAndTranslationForSourceElement() { const sourceElement = props.content.sourceElement; + const contentRenderingRect = getContentRenderingRect(); if (sourceElement == null || contentRenderingRect == null) return null; return calculateSourceTransform({ diff --git a/packages/frontend/src/components/MkImageGallery.vue b/packages/frontend/src/components/MkImageGallery.vue index cebef46661..ff72fdebc6 100644 --- a/packages/frontend/src/components/MkImageGallery.vue +++ b/packages/frontend/src/components/MkImageGallery.vue @@ -88,6 +88,12 @@ const contentsOffset = ref(currentIndex.value * -window.innerWidth); const enableSlideTransition = ref(false); let currentScrollLeft = contentsOffset.value; +// TODO: unmountで解除 +window.addEventListener('resize', () => { + screenWidth.value = window.innerWidth; + scrollToCurrentIndex(); +}); + function onHorizontalSwipe(offset: number) { if (currentIndex.value === 0 && offset > 0) { // これ以上戻れない contentsOffset.value = currentScrollLeft + (offset / 3);