Skip to content

Commit 360ee70

Browse files
fix: remove listener on bind_current_time teardown (#15013)
Fixes #15008
1 parent dfa97a5 commit 360ee70

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

.changeset/sour-pots-wonder.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: remove listener on `bind_current_time` teardown

packages/svelte/src/internal/client/dom/elements/bindings/media.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ export function bind_current_time(media, get, set = get) {
5252
}
5353
});
5454

55-
teardown(() => cancelAnimationFrame(raf_id));
55+
teardown(() => {
56+
cancelAnimationFrame(raf_id);
57+
media.removeEventListener('timeupdate', callback);
58+
});
5659
}
5760

5861
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { flushSync } from 'svelte';
2+
import { ok, test } from '../../test';
3+
4+
export default test({
5+
async test({ assert, target, logs }) {
6+
const audio = target.querySelector('audio');
7+
const btn = target.querySelector('button');
8+
9+
ok(audio);
10+
11+
flushSync(() => {
12+
audio.currentTime = 10;
13+
audio.dispatchEvent(new Event('timeupdate'));
14+
});
15+
assert.deepEqual(logs, ['event']);
16+
17+
flushSync(() => {
18+
btn?.click();
19+
});
20+
flushSync(() => {
21+
audio.currentTime = 20;
22+
audio.dispatchEvent(new Event('timeupdate'));
23+
});
24+
assert.deepEqual(logs, ['event']);
25+
}
26+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script>
2+
let show = $state(true);
3+
let time = $state(0);
4+
</script>
5+
6+
<button onclick={()=> show = false}></button>
7+
{#if show}
8+
<audio bind:currentTime={()=>time,(new_time)=>{
9+
console.log("event");
10+
time = new_time;
11+
}}></audio>
12+
{/if}

0 commit comments

Comments
 (0)