enhance(frontend): scroll position restoration in the drive page and "Files" tab on the user page (#17497)

* fix: ユーザーページのFilesタブでスクロール位置が正しく復元されない問題を修正

* fix: ドライブページでスクロール位置が保持されない問題を修正

* fix: 変更履歴の文言を調整

* fix: 同じファイルを複数ノートに添付した場合にスクロール位置が先頭要素へ戻る問題を修正

* fix: viewPosition の計算誤りと KeepAlive によるスクロール位置消失を修正

* fix: スクロール位置復元が下端要素の見切れを引き起こす問題を修正

* fix: スクロール位置復元がコンテナ高さ変化時にオーバーシュートする問題を修正

* Update CHANGELOG.md

Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>

* fix: 最下部スクロール時にスクロール位置のキャプチャが失敗する問題を修正

min-height による空白領域にビューポート中央が入るケースで anchorId が更新
されず、復元が古い位置に飛んでしまう問題を修正した。
アンカー選択条件を「中央を跨ぐ要素のみ」から「上端が中央以下の最も下の要素」
に変更することで、空白領域スクロール時も最後のアイテムを正しくキャプチャできる。

* Update CHANGELOG.md

* fix: MkNoteMediaGrid のスクロールアンカーをノートIDとファイルIDの複合キーに変更

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: anchorIndex による重複アンカー対応を削除

* refactor: unused になった onUnmounted の import を削除

* refactor: querySelectorAll/querySelector にジェネリクスを渡し型キャストを削除

---------

Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Kissa Ruokanen
2026-06-03 09:07:17 +09:00
committed by GitHub
parent eed6c3654f
commit 23bb992121
5 changed files with 45 additions and 19 deletions
@@ -69,6 +69,7 @@ SPDX-License-Identifier: AGPL-3.0-only
v-for="(f, i) in foldersPaginator.items.value"
:key="f.id"
v-anim="i"
:data-scroll-anchor="f.id"
:folder="f"
:selectMode="select === 'folder'"
:isSelected="selectedFolders.some(x => x.id === f.id)"
@@ -101,6 +102,7 @@ SPDX-License-Identifier: AGPL-3.0-only
>
<XFile
v-for="file in item.items" :key="file.id"
:data-scroll-anchor="file.id"
:file="file"
:folder="folder"
:isSelected="selectedFiles.some(x => x.id === file.id)"
@@ -123,6 +125,7 @@ SPDX-License-Identifier: AGPL-3.0-only
>
<XFile
v-for="file in filesPaginator.items.value" :key="file.id"
:data-scroll-anchor="file.id"
:file="file"
:folder="folder"
:isSelected="selectedFiles.some(x => x.id === file.id)"
@@ -8,6 +8,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div
v-if="isHiding(file)"
:class="[$style.filePreview, { [$style.square]: square }]"
:data-scroll-anchor="`${note.id}:${file.id}`"
@click="reveal(file)"
>
<MkDriveFileThumbnail
@@ -26,7 +27,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</div>
</div>
<MkA v-else :class="[$style.filePreview, { [$style.square]: square }]" :to="notePage(note)">
<MkA v-else :class="[$style.filePreview, { [$style.square]: square }]" :data-scroll-anchor="`${note.id}:${file.id}`" :to="notePage(note)">
<MkDriveFileThumbnail
:file="file"
fit="cover"