feat: support media playbackRate (#1000)

Co-authored-by: wangfukang <wangfukang@kuaishou.com>
This commit is contained in:
fukang wang
2026-04-01 12:00:00 +08:00
committed by GitHub
parent 503d78f941
commit 5fdc817e06
7 changed files with 20 additions and 1 deletions

View File

@@ -133,6 +133,8 @@ export function diff(
oldMediaElement.volume = newMediaRRElement.volume;
if (newMediaRRElement.currentTime !== undefined)
oldMediaElement.currentTime = newMediaRRElement.currentTime;
if (newMediaRRElement.playbackRate !== undefined)
oldMediaElement.playbackRate = newMediaRRElement.playbackRate;
break;
}
case 'CANVAS':

View File

@@ -580,6 +580,7 @@ export function BaseRRMediaElementImpl<
public volume?: number;
public paused?: boolean;
public muted?: boolean;
public playbackRate?: number;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
attachShadow(_init: ShadowRootInit): IRRElement {
throw new Error(

View File

@@ -217,6 +217,7 @@ describe('diff algorithm for rrdom', () => {
expect(element.currentTime).toEqual(0);
expect(element.muted).toEqual(false);
expect(element.paused).toEqual(true);
expect(element.playbackRate).toEqual(1);
const rrDocument = new RRDocument();
const rrMedia = rrDocument.createElement(tagName) as RRMediaElement;
@@ -224,12 +225,14 @@ describe('diff algorithm for rrdom', () => {
rrMedia.currentTime = 100;
rrMedia.muted = true;
rrMedia.paused = false;
rrMedia.playbackRate = 0.5;
diff(element, rrMedia, replayer);
expect(element.volume).toEqual(0.5);
expect(element.currentTime).toEqual(100);
expect(element.muted).toEqual(true);
expect(element.paused).toEqual(false);
expect(element.playbackRate).toEqual(0.5);
rrMedia.paused = true;
diff(element, rrMedia, replayer);

View File

@@ -894,6 +894,7 @@ describe('Basic RRDocument implementation', () => {
expect(node.volume).toBeUndefined();
expect(node.paused).toBeUndefined();
expect(node.muted).toBeUndefined();
expect(node.playbackRate).toBeUndefined();
expect(node.play).toBeDefined();
expect(node.pause).toBeDefined();
expect(node.toString()).toEqual('VIDEO ');