aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/components
diff options
context:
space:
mode:
authorYasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>2026-11-06 20:57:00 +0900
committerYasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>2026-11-06 20:57:00 +0900
commitfbba5cbd1c043a107ce299a50f13e8bdfcf525a8 (patch)
treef8a223f0a93d681f910ac0a765590c647837e937 /src/components
parent9e8fb9a3952bfe7e7c6ca54a656270f99545e6c6 (diff)
parks: 一覧のスクロールを表の枠内に限定
地図で公園をクリックしたとき、ブラウザごとスクロールせず表の枠内だけをスクロールする。
Diffstat (limited to 'src/components')
-rw-r--r--src/components/ParksTable.astro13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/components/ParksTable.astro b/src/components/ParksTable.astro
index 1eab03d..2141eac 100644
--- a/src/components/ParksTable.astro
+++ b/src/components/ParksTable.astro
@@ -775,6 +775,15 @@ function isUnconfirmed(p: Park): boolean {
const allRows = () => Array.from(tbody.querySelectorAll<HTMLTableRowElement>("tr"));
const total = allRows().length;
+ // 表の枠内だけでスクロールする(ブラウザごと動かさない)
+ const scrollRowIntoView = (row: HTMLElement) => {
+ const scroller = root.querySelector<HTMLElement>(".parks-scroll");
+ if (!scroller) return;
+ const rowRect = row.getBoundingClientRect();
+ const scRect = scroller.getBoundingClientRect();
+ const delta = rowRect.top - scRect.top - scRect.height / 2 + rowRect.height / 2;
+ scroller.scrollTo({ top: scroller.scrollTop + delta, behavior: "smooth" });
+ };
let sortKey: string | null = null;
let sortDir = 1;
@@ -889,7 +898,7 @@ function isUnconfirmed(p: Park): boolean {
});
const row = allRows().find((r) => r.dataset.name === name);
if (row && !row.classList.contains("is-hidden")) {
- row.scrollIntoView({ behavior: "smooth", block: "center" });
+ scrollRowIntoView(row);
}
});
@@ -911,7 +920,7 @@ function isUnconfirmed(p: Park): boolean {
row.classList.add("is-highlighted");
window.setTimeout(() => row.classList.remove("is-highlighted"), 2000);
if (detail.scroll) {
- row.scrollIntoView({ behavior: "smooth", block: "center" });
+ scrollRowIntoView(row);
}
}
});