Skip to content

Commit 326b329

Browse files
7nik7nikRich-Harris
authored
fix: more frequently update bind:buffered to actual value (#15874)
* fix: more frequently update `bind:buffered` to actual value * small tweak --------- Co-authored-by: 7nik <kifiranet@gmail.com> Co-authored-by: Rich Harris <rich.harris@vercel.com>
1 parent f2796dd commit 326b329

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

.changeset/short-impalas-exist.md

+5
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

+17-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,23 @@ 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+
68+
// `buffered` can update without emitting any event, so we check it on various events.
69+
// By specs, `buffered` always returns a new object, so we have to compare deeply.
70+
listen(media, ['loadedmetadata', 'progress', 'timeupdate', 'seeking'], () => {
71+
var ranges = media.buffered;
72+
73+
if (
74+
!current ||
75+
current.length !== ranges.length ||
76+
current.some((range, i) => ranges.start(i) !== range.start || ranges.end(i) !== range.end)
77+
) {
78+
current = time_ranges_to_array(ranges);
79+
set(current);
80+
}
81+
});
6682
}
6783

6884
/**

0 commit comments

Comments
 (0)