Skip to content

Commit 49b2e33

Browse files
committed
fix: more frequently update bind:buffered to actual value
1 parent 0ace76d commit 49b2e33

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

.changeset/short-impalas-exist.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: more frequently update `bind:buffered` to actual value

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,21 @@ export function bind_current_time(media, get, set = get) {
6262
* @param {(array: Array<{ start: number; end: number }>) => void} set
6363
*/
6464
export function bind_buffered(media, set) {
65-
listen(media, ['loadedmetadata', 'progress'], () => set(time_ranges_to_array(media.buffered)));
65+
/** @type {{ start: number; end: number; }[]} */
66+
var current;
67+
// `buffered` can update without emitting any event, so we check it on various events.
68+
// By specs, `buffered` always returns a new object, so we have to compare deeply.
69+
listen(media, ['loadedmetadata', 'progress', 'timeupdate', 'seeking'], () => {
70+
var buf = media.buffered;
71+
if (
72+
!current ||
73+
current.length !== buf.length ||
74+
current.some((range, i) => buf.start(i) !== range.start || buf.end(i) !== range.end)
75+
) {
76+
current = time_ranges_to_array(buf);
77+
set(current);
78+
}
79+
});
6680
}
6781

6882
/**

0 commit comments

Comments
 (0)