152 lines
6.7 KiB
Markdown
152 lines
6.7 KiB
Markdown
# Controls
|
|
|
|
This is the markup that is rendered for the Plyr controls. You can use the default controls or provide a customized version of markup based on your needs. You can pass the following to the `controls` option:
|
|
|
|
* `Array` of options (this builds the default controls based on your choices)
|
|
* `String` containing the desired HTML
|
|
* `Function` that will be executed and should return one of the above
|
|
|
|
## Using default controls
|
|
|
|
If you want to use the standard controls as they are, you don't need to pass any options. If you want to turn on off controls, here's the full list:
|
|
|
|
```javascript
|
|
controls: [
|
|
'play-large', // The large play button in the center
|
|
'restart', // Restart playback
|
|
'rewind', // Rewind by the seek time (default 10 seconds)
|
|
'play', // Play/pause playback
|
|
'fast-forward', // Fast forward by the seek time (default 10 seconds)
|
|
'progress', // The progress bar and scrubber for playback and buffering
|
|
'current-time', // The current time of playback
|
|
'duration', // The full duration of the media
|
|
'mute', // Toggle mute
|
|
'volume', // Volume control
|
|
'captions', // Toggle captions
|
|
'settings', // Settings menu
|
|
'pip', // Picture-in-picture (currently Safari only)
|
|
'airplay', // Airplay (currently Safari only)
|
|
'fullscreen', // Toggle fullscreen
|
|
];
|
|
```
|
|
|
|
### Internationalization using default controls
|
|
|
|
You can provide an `i18n` object as one of your options when initialising the plugin which we be used when rendering the controls.
|
|
|
|
#### Example
|
|
|
|
```javascript
|
|
i18n: {
|
|
restart: 'Restart',
|
|
rewind: 'Rewind {seektime} secs',
|
|
play: 'Play',
|
|
pause: 'Pause',
|
|
fastForward: 'Forward {seektime} secs',
|
|
seek: 'Seek',
|
|
played: 'Played',
|
|
buffered: 'Buffered',
|
|
currentTime: 'Current time',
|
|
duration: 'Duration',
|
|
volume: 'Volume',
|
|
mute: 'Mute',
|
|
unmute: 'Unmute',
|
|
enableCaptions: 'Enable captions',
|
|
disableCaptions: 'Disable captions',
|
|
enterFullscreen: 'Enter fullscreen',
|
|
exitFullscreen: 'Exit fullscreen',
|
|
frameTitle: 'Player for {title}',
|
|
captions: 'Captions',
|
|
settings: 'Settings',
|
|
speed: 'Speed',
|
|
quality: 'Quality',
|
|
loop: 'Loop',
|
|
start: 'Start',
|
|
end: 'End',
|
|
all: 'All',
|
|
reset: 'Reset',
|
|
disabled: 'Disabled',
|
|
advertisement: 'Ad',
|
|
}
|
|
```
|
|
|
|
Note: `{seektime}` will be replaced with your configured seek time or the default. For example "Forward {seektime} secs" would render as "Forward 10 secs".
|
|
|
|
## Using custom HTML
|
|
|
|
You can specify the HTML as a `String` or your `Function` return for the controls using the `controls` option.
|
|
|
|
The classes and data attributes used in your template should match the `selectors` option if you change any.
|
|
|
|
You need to add several placeholders to your HTML template that are replaced when rendering:
|
|
|
|
* `{id}` - the dynamically generated ID for the player (for form controls)
|
|
* `{seektime}` - the seek time specified in options for fast forward and rewind
|
|
* `{title}` - the title of your media, if specified
|
|
|
|
### Limitations
|
|
|
|
* Currently the settings menus are not supported with custom controls HTML
|
|
* AirPlay and PiP buttons can be added but you will have to manage feature detection
|
|
|
|
### Example
|
|
|
|
Here's an example of custom controls markup (this is just all default controls shown).
|
|
|
|
```javascript
|
|
const controls = `
|
|
<div class="plyr__controls">
|
|
<button type="button" class="plyr__control" data-plyr="restart">
|
|
<svg role="presentation"><use xlink:href="#plyr-restart"></use></svg>
|
|
<span class="plyr__tooltip" role="tooltip">Restart</span>
|
|
</button>
|
|
<button type="button" class="plyr__control" data-plyr="rewind">
|
|
<svg role="presentation"><use xlink:href="#plyr-rewind"></use></svg>
|
|
<span class="plyr__tooltip" role="tooltip">Rewind {seektime} secs</span>
|
|
</button>
|
|
<button type="button" class="plyr__control" aria-pressed="false" aria-label="Play, {title}" data-plyr="play">
|
|
<svg class="icon--pressed" role="presentation"><use xlink:href="#plyr-pause"></use></svg>
|
|
<svg class="icon--not-pressed" role="presentation"><use xlink:href="#plyr-play"></use></svg>
|
|
<span class="label--pressed plyr__tooltip" role="tooltip">Pause</span>
|
|
<span class="label--not-pressed plyr__tooltip" role="tooltip">Play</span>
|
|
</button>
|
|
<button type="button" class="plyr__control" data-plyr="fast-forward">
|
|
<svg role="presentation"><use xlink:href="#plyr-fast-forward"></use></svg>
|
|
<span class="plyr__tooltip" role="tooltip">Forward {seektime} secs</span>
|
|
</button>
|
|
<div class="plyr__progress">
|
|
<label for="plyr-seek-{id}" class="plyr__sr-only">Seek</label>
|
|
<input data-plyr="seek" type="range" min="0" max="100" step="0.01" value="0" id="plyr-seek-{id}">
|
|
<progress class="plyr__progress--buffer" min="0" max="100" value="0">% buffered</progress>
|
|
<span role="tooltip" class="plyr__tooltip">00:00</span>
|
|
</div>
|
|
<div class="plyr__time">00:00</div>
|
|
<button type="button" class="plyr__control" aria-pressed="false" aria-label="Mute" data-plyr="mute">
|
|
<svg class="icon--pressed" role="presentation"><use xlink:href="#plyr-muted"></use></svg>
|
|
<svg class="icon--not-pressed" role="presentation"><use xlink:href="#plyr-volume"></use></svg>
|
|
<span class="label--pressed plyr__tooltip" role="tooltip">Unmute</span>
|
|
<span class="label--not-pressed plyr__tooltip" role="tooltip">Mute</span>
|
|
</button>
|
|
<div class="plyr__volume">
|
|
<label for="plyr-volume-{id}" class="plyr__sr-only">Volume</label>
|
|
<input data-plyr="volume" type="range" min="0" max="1" step="0.05" value="1" autocomplete="off" id="plyr-volume-{id}">
|
|
</div>
|
|
<button type="button" class="plyr__control" aria-pressed="true" aria-label="Enable captions" data-plyr="captions">
|
|
<svg class="icon--pressed" role="presentation"><use xlink:href="#plyr-captions-on"></use></svg>
|
|
<svg class="icon--not-pressed" role="presentation"><use xlink:href="#plyr-captions-off"></use></svg>
|
|
<span class="label--pressed plyr__tooltip" role="tooltip">Disable captions</span>
|
|
<span class="label--not-pressed plyr__tooltip" role="tooltip">Enable captions</span>
|
|
</button>
|
|
<button type="button" class="plyr__control" aria-pressed="false" aria-label="Enter fullscreen" data-plyr="fullscreen">
|
|
<svg class="icon--pressed" role="presentation"><use xlink:href="#plyr-exit-fullscreen"></use></svg>
|
|
<svg class="icon--not-pressed" role="presentation"><use xlink:href="#plyr-enter-fullscreen"></use></svg>
|
|
<span class="label--pressed plyr__tooltip" role="tooltip">Exit fullscreen</span>
|
|
<span class="label--not-pressed plyr__tooltip" role="tooltip">Enter fullscreen</span>
|
|
</button>
|
|
</div>
|
|
`;
|
|
|
|
// Setup the player
|
|
const player = new Plyr('#player', { controls });
|
|
```
|