From b2a6c0c9f93df27bee38ac31b41bb381a5c6e822 Mon Sep 17 00:00:00 2001 From: "svelte-triage-bot[bot]" <316883489+svelte-triage-bot[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2026 15:37:06 +0000 Subject: [PATCH] fix: stop currentTime binding updates during outros --- .../internal/client/dom/elements/bindings/media.js | 7 +++++++ .../transition-media-binding-outro/_config.js | 13 +++++++++++++ .../transition-media-binding-outro/main.svelte | 11 +++++++++++ 3 files changed, 31 insertions(+) create mode 100644 packages/svelte/tests/runtime-runes/samples/transition-media-binding-outro/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/transition-media-binding-outro/main.svelte diff --git a/packages/svelte/src/internal/client/dom/elements/bindings/media.js b/packages/svelte/src/internal/client/dom/elements/bindings/media.js index 87da950375..eb538169ba 100644 --- a/packages/svelte/src/internal/client/dom/elements/bindings/media.js +++ b/packages/svelte/src/internal/client/dom/elements/bindings/media.js @@ -1,4 +1,7 @@ +/** @import { Effect } from '#client' */ +import { INERT } from '#client/constants'; import { render_effect, effect, teardown } from '../../../reactivity/effects.js'; +import { active_effect } from '../../../runtime.js'; import { listen } from './shared.js'; /** @param {TimeRanges} ranges */ @@ -19,6 +22,8 @@ function time_ranges_to_array(ranges) { * @returns {void} */ export function bind_current_time(media, get, set = get) { + var effect = /** @type {Effect} */ (active_effect); + /** @type {number} */ var raf_id; /** @type {number} */ @@ -34,6 +39,8 @@ export function bind_current_time(media, get, set = get) { raf_id = requestAnimationFrame(callback); } + if ((effect.f & INERT) !== 0) return; + var next_value = media.currentTime; if (value !== next_value) { set((value = next_value)); diff --git a/packages/svelte/tests/runtime-runes/samples/transition-media-binding-outro/_config.js b/packages/svelte/tests/runtime-runes/samples/transition-media-binding-outro/_config.js new file mode 100644 index 0000000000..226e28630b --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/transition-media-binding-outro/_config.js @@ -0,0 +1,13 @@ +import { flushSync } from '../../../../src/index-client.js'; +import { test } from '../../test'; + +export default test({ + test({ target }) { + const button = /** @type {HTMLButtonElement} */ (target.querySelector('button')); + const audio = /** @type {HTMLAudioElement} */ (target.querySelector('audio')); + + flushSync(() => button.click()); + audio.currentTime = 1; + audio.dispatchEvent(new Event('timeupdate')); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/transition-media-binding-outro/main.svelte b/packages/svelte/tests/runtime-runes/samples/transition-media-binding-outro/main.svelte new file mode 100644 index 0000000000..199c06c160 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/transition-media-binding-outro/main.svelte @@ -0,0 +1,11 @@ + + + + +{#if item} + +{/if}