diff --git a/templates/src/client/app.ts b/templates/src/client/app.ts index 9456a6336..36018adbd 100644 --- a/templates/src/client/app.ts +++ b/templates/src/client/app.ts @@ -106,16 +106,17 @@ export function scroll_state() { }; } -export function navigate(target: Target, id: number): Promise { +export function navigate(target: Target, id: number, has_scroll = false): Promise { if (id) { // popstate or initial navigation cid = id; } else { + const current_scroll = scroll_state() // clicked on a link. preserve scroll state - scroll_history[cid] = scroll_state(); + scroll_history[cid] = current_scroll; id = cid = ++uid; - scroll_history[cid] = { x: 0, y: 0 }; + scroll_history[cid] = has_scroll ? current_scroll : { x: 0, y: 0 }; } cid = id; diff --git a/templates/src/client/start/index.ts b/templates/src/client/start/index.ts index 240fdd8eb..a34f6b221 100644 --- a/templates/src/client/start/index.ts +++ b/templates/src/client/start/index.ts @@ -102,8 +102,9 @@ function handle_click(event: MouseEvent) { if (url.pathname === location.pathname && url.search === location.search) return; const target = select_route(url); + const has_scroll = a.hasAttribute('sapper-noscroll') if (target) { - navigate(target, null); + navigate(target, null, has_scroll); event.preventDefault(); history.pushState({ id: cid }, '', url.href); }