PlaybackRateButton
A button that cycles through playback speed rates
Import
import { PlaybackRateButton } from '@videojs/react';import '@videojs/html/ui/playback-rate-button';Editable styled source
Install the styled component and its exact dependencies with Shadcn, or copy the same generated files manually.
Add the @videojs namespace for the reacttailwind catalog, then install the editable source.
{
"registries": {
"@videojs": "https://shadcn.videojs.org/r/react/{name}.json"
}
}pnpm dlx shadcn@latest add @videojs/playback-rate-buttonInstalls `@/components/videojs/ui/playback-rate-button.tsx` for use inside a compatible Video.js Player or Skin.
Copy the exact files below and install these packages: @videojs/react@10.0.0-beta.32 clsx react.
Also install the Shadcn dependencies utils.
Add the @videojs namespace for the reactcss catalog, then install the editable source.
{
"registries": {
"@videojs": "https://shadcn.videojs.org/r/react/css/{name}.json"
}
}pnpm dlx shadcn@latest add @videojs/playback-rate-buttonInstalls `@/components/videojs/ui/playback-rate-button.tsx` for use inside a compatible Video.js Player or Skin.
Copy the exact files below and install these packages: @videojs/react@10.0.0-beta.32 clsx react.
Also install the Shadcn dependencies utils.
Anatomy
<PlaybackRateButton /><media-playback-rate-button></media-playback-rate-button>Behavior
Cycles through playback rates on click. The default rate list is [0.2, 0.5, 0.7, 1, 1.2, 1.5, 1.7, 2]. After the last rate, it wraps back to the first. If the current rate isn’t in the list (e.g., set programmatically), the button jumps to the next rate greater than the current one.
When menuTrigger is enabled, activation opens the linked playback-rate menu instead of cycling through rates. Use this mode when the button is the trigger for a Menu that contains playback-rate options.
Styling
Display the current rate using the data-rate attribute:
media-playback-rate-button::after {
content: attr(data-rate) "\00D7";
}Use the render prop for rate display:
<PlaybackRateButton
render={(props, state) => <button {...props}>{state.rate}×</button>}
/>Accessibility
Renders a <button> with an automatic aria-label of "Playback rate {rate}" (e.g., "Playback rate 1.5"). Override with the label prop. Keyboard activation: Enter / Space.
In menu-trigger mode, the button behaves as a menu trigger and reflects menu state through the trigger attributes.
Examples
Basic Usage
import { Container, createPlayer, PlaybackRateButton } from '@videojs/react';
import { Video, videoFeatures } from '@videojs/react/video';
const { Player } = createPlayer({ features: videoFeatures });
export default function BasicUsage() {
return (
<Player>
<Container className="media-container">
<Video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" autoPlay muted playsInline loop />
<PlaybackRateButton
className="media-playback-rate-button"
render={(props, state) => <button {...props}>{Math.round(state.rate * 10) / 10}×</button>}
/>
</Container>
</Player>
);
}
.media-container {
position: relative;
}
.media-container video {
width: 100%;
}
.media-playback-rate-button {
position: absolute;
bottom: 10px;
left: 10px;
padding-block: 8px;
padding-inline: 20px;
color: black;
cursor: pointer;
background: rgba(255, 255, 255, 0.7);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 9999px;
backdrop-filter: blur(10px);
}
<video-player class="video-player">
<media-container>
<video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" autoplay muted playsinline loop></video>
<media-playback-rate-button class="media-playback-rate-button"> </media-playback-rate-button>
</media-container>
</video-player>
.video-player media-container {
position: relative;
}
.video-player media-container video {
width: 100%;
}
.media-playback-rate-button {
position: absolute;
bottom: 10px;
left: 10px;
padding-block: 8px;
padding-inline: 20px;
color: black;
cursor: pointer;
background: rgba(255, 255, 255, 0.7);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 9999px;
backdrop-filter: blur(10px);
}
.media-playback-rate-button::after {
content: attr(data-rate) "\00D7";
}
import '@videojs/html/video/player';
import '@videojs/html/ui/container';
import '@videojs/html/ui/playback-rate-button';
API Reference
Props
| Prop | Type | Default | Details |
|---|---|---|---|
disabled | boolean | false | |
| |||
label | object | '' | |
| |||
menuTrigger | boolean | false | |
| |||
State
render, className, and style props.| Property | Type | Details |
|---|---|---|
label | { key: string; text: string } | string | |
rate | number |
Data attributes
| Attribute | Type | Details |
|---|---|---|
data-rate | number | |
| ||