diff --git a/.changeset/gorgeous-mails-roll.md b/.changeset/gorgeous-mails-roll.md new file mode 100644 index 0000000000..85bd91d969 --- /dev/null +++ b/.changeset/gorgeous-mails-roll.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: ensure window scroll binding inits to window value diff --git a/packages/svelte/src/internal/client/dom/elements/bindings/window.js b/packages/svelte/src/internal/client/dom/elements/bindings/window.js index 63123430c9..fa592f3f86 100644 --- a/packages/svelte/src/internal/client/dom/elements/bindings/window.js +++ b/packages/svelte/src/internal/client/dom/elements/bindings/window.js @@ -42,6 +42,8 @@ export function bind_window_scroll(type, get_value, update) { scrollTo(window.scrollX, latest_value); } timeout = setTimeout(clear, 100); + } else if (latest_value == null) { + update(window[is_scrolling_x ? 'scrollX' : 'scrollY']); } }); diff --git a/packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-init/_config.js b/packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-init/_config.js new file mode 100644 index 0000000000..4b461db6a1 --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-init/_config.js @@ -0,0 +1,29 @@ +import { test } from '../../test'; +import { vi } from 'vitest'; + +/** @type {Window['scrollTo']} */ +let original_scrollTo; + +export default test({ + before_test() { + vi.useFakeTimers(); + + Object.defineProperties(window, { + scrollY: { + value: 0, + configurable: true, + writable: true + } + }); + }, + + after_test() { + vi.useRealTimers(); + }, + + async test({ assert, component, window }) { + assert.equal(window.pageYOffset, 0); + + assert.equal(component.scrollY, 0); + } +}); diff --git a/packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-init/main.svelte b/packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-init/main.svelte new file mode 100644 index 0000000000..89840b4801 --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/window-bind-scroll-init/main.svelte @@ -0,0 +1,7 @@ + + + +