Select current playback rate in playback rate selector (#1902)
* Select current playback rate in playback rate selector * More concise implementation Co-authored-by: PikachuEXE <pikachuexe@gmail.com> * Scroll to the selected element instead of focusing it Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
This commit is contained in:
parent
842dc93231
commit
82b223ea97
|
@ -322,6 +322,36 @@ export default Vue.extend({
|
|||
this.player.removeChild('BigPlayButton')
|
||||
}
|
||||
|
||||
// Makes the playback rate menu focus the current item on mouse hover
|
||||
// or the closest item if the playback rate is between two items
|
||||
// which is likely to be the case when the playback rate is changed by scrolling
|
||||
const playbackRateMenuButton = this.player.controlBar.getChild('playbackRateMenuButton')
|
||||
playbackRateMenuButton.on(playbackRateMenuButton.menuButton_, 'mouseenter', () => {
|
||||
const playbackRate = this.player.playbackRate()
|
||||
const rates = this.player.playbackRates()
|
||||
|
||||
// iterate through the items in reverse order as the highest is displayed first
|
||||
// `slice` must be used as `reverse` does reversing in place
|
||||
const targetPlaybackRateMenuItemIndex = rates.slice().reverse().findIndex((rate) => {
|
||||
return rate === playbackRate || rate < playbackRate
|
||||
})
|
||||
|
||||
// center the selected item in the middle of the visible area
|
||||
// the first and last items will never be in the center so it can be skipped for them
|
||||
if (targetPlaybackRateMenuItemIndex !== 0 && targetPlaybackRateMenuItemIndex !== rates.length - 1) {
|
||||
const playbackRateMenu = playbackRateMenuButton.menu
|
||||
const menuElement = playbackRateMenu.contentEl()
|
||||
|
||||
const itemHeight = playbackRateMenu.children()[targetPlaybackRateMenuItemIndex].contentEl().clientHeight
|
||||
|
||||
// clientHeight is the height of the visible part of an element
|
||||
const centerOfVisibleArea = (menuElement.clientHeight - itemHeight) / 2
|
||||
const menuScrollOffset = (itemHeight * targetPlaybackRateMenuItemIndex) - centerOfVisibleArea
|
||||
|
||||
menuElement.scrollTo({ top: menuScrollOffset })
|
||||
}
|
||||
})
|
||||
|
||||
if (this.storyboardSrc !== '') {
|
||||
this.player.vttThumbnails({
|
||||
src: this.storyboardSrc,
|
||||
|
|
Loading…
Reference in New Issue