如何制作全宽 videojs v5 进度条?
How can I make a full width videojs v5 progress bar?
我想更改 videojs v5 控件布局,以便在 vjs-control-bar
区域顶部制作全宽进度条,类似于 v5 之前的播放器皮肤。
这是 v5 皮肤:
这是 v5 之前的皮肤。注意全宽进度条:
我该如何进行?是否需要修改 ProgressControl
组件中的 component structure tree 或仅使用 CSS 和现有 ProgressControl
组件来完成?
我注意到我可以通过将 vjs-progress-control
display
CSS 属性 从 flex
更改为 block
来将其置于顶部, initial
或 inline
但我无法将宽度设置为 100%(其他 ProgressControl 组件宽度仍被考虑在内)。我认为这是因为 vjs-progress-control
仍在容器的弹性流中。
编辑
我取得了一些进步。我可以通过使用以下 CSS:
来达到预期的效果
.vjs-progress-control {
position: absolute;
bottom: 26px; /* The height of the ControlBar minus 4px. */
left: 0;
right: 0;
width: 100%;
height: 10px; /* the height must be reduced from 30 to 10px in order to allow the buttons below (e.g. play) to be pushed */
}
.vjs-progress-holder {/* needed to have a real 100% width display. */
margin-left: 0px;
margin-right: 0px;
}
除非你们中的任何一个找到改进它的方法,否则我将post在允许时将此编辑作为已接受的答案。
.vjs-fluid {
overflow: hidden;
}
.vjs-control-bar {
display: block;
}
.vjs-control {
position: absolute;
}
.vjs-progress-control {
bottom: 28px; left: 0;
height: 10px;
width: 100%;
}
.vjs-progress-holder {
position: absolute;
left: 0; margin: 0;
height: 8px; width: 100%;
}
.vjs-play-progress,
.vjs-load-progress {
height: 8px;
}
.vjs-play-progress:before {
font-size: 12px; top: -2px;
text-shadow: 0 0 2px black
}
.vjs-current-time {
display: block;
left: 35px;
}
.vjs-time-divider {
position: absolute;
display: block;
left: 70px;
}
.vjs-remaining-time {
display: none;
}
.vjs-duration {
display: block;
left: 70px;
}
.vjs-volume-menu-button {
position: absolute;
bottom: 0; right: 55px;
}
.vjs-playback-rate {
position: absolute;
bottom: 0; right: 28px;
}
.vjs-fullscreen-control {
position: absolute;
bottom: 0; right: 0;
}
仍然需要设置字幕、字幕和章节按钮的样式
.video-js .vjs-progress-control {
position:absolute;
width: 100%;
top:-.3em;
height:3px;
/* deal with resulting gap between progress control and control bar that
is the result of the attempt to keep things "clickable" on the controls */
background-color: #2B333F;
background-color: rgba(43, 51, 63, 0.7);
}
.video-js .vjs-progress-holder {
position:absolute;
margin:0px;
top:0%;
width:100%;
}
这似乎解决了我在使用从 video.js 继承的 :hover
样式的其他浏览器中遇到的问题。更熟练的 css
开发人员可能能够使扩展成为自下而上的扩展,从而无需围绕进度控件的位置和颜色进行花哨的步法。
这是一个最小的自定义皮肤(在 scss 中),它在其余控件上方显示全角进度条。这适用于 video.js 5.19.2
.video-js.vjs-custom-skin {
.vjs-custom-control-spacer {
display: flex;
flex: 1 1 auto;
}
.vjs-time-divider {
display: inherit;
}
.vjs-current-time {
margin-left: 1em;
}
.vjs-current-time, .vjs-duration {
display: inherit;
padding: 0;
}
.vjs-remaining-time {
display: none;
}
.vjs-play-progress:before {
display: none;
}
.vjs-progress-control {
position: absolute;
left: 0;
right: 0;
width: 100%;
height: .5em;
top: -.5em;
&:hover {
height: 1.5em;
top: -1.5em;
}
}
.vjs-progress-holder {
margin: 0;
height: 100%;
}
}
我想更改 videojs v5 控件布局,以便在 vjs-control-bar
区域顶部制作全宽进度条,类似于 v5 之前的播放器皮肤。
这是 v5 皮肤:
这是 v5 之前的皮肤。注意全宽进度条:
我该如何进行?是否需要修改 ProgressControl
组件中的 component structure tree 或仅使用 CSS 和现有 ProgressControl
组件来完成?
我注意到我可以通过将 vjs-progress-control
display
CSS 属性 从 flex
更改为 block
来将其置于顶部, initial
或 inline
但我无法将宽度设置为 100%(其他 ProgressControl 组件宽度仍被考虑在内)。我认为这是因为 vjs-progress-control
仍在容器的弹性流中。
编辑
我取得了一些进步。我可以通过使用以下 CSS:
来达到预期的效果.vjs-progress-control {
position: absolute;
bottom: 26px; /* The height of the ControlBar minus 4px. */
left: 0;
right: 0;
width: 100%;
height: 10px; /* the height must be reduced from 30 to 10px in order to allow the buttons below (e.g. play) to be pushed */
}
.vjs-progress-holder {/* needed to have a real 100% width display. */
margin-left: 0px;
margin-right: 0px;
}
除非你们中的任何一个找到改进它的方法,否则我将post在允许时将此编辑作为已接受的答案。
.vjs-fluid {
overflow: hidden;
}
.vjs-control-bar {
display: block;
}
.vjs-control {
position: absolute;
}
.vjs-progress-control {
bottom: 28px; left: 0;
height: 10px;
width: 100%;
}
.vjs-progress-holder {
position: absolute;
left: 0; margin: 0;
height: 8px; width: 100%;
}
.vjs-play-progress,
.vjs-load-progress {
height: 8px;
}
.vjs-play-progress:before {
font-size: 12px; top: -2px;
text-shadow: 0 0 2px black
}
.vjs-current-time {
display: block;
left: 35px;
}
.vjs-time-divider {
position: absolute;
display: block;
left: 70px;
}
.vjs-remaining-time {
display: none;
}
.vjs-duration {
display: block;
left: 70px;
}
.vjs-volume-menu-button {
position: absolute;
bottom: 0; right: 55px;
}
.vjs-playback-rate {
position: absolute;
bottom: 0; right: 28px;
}
.vjs-fullscreen-control {
position: absolute;
bottom: 0; right: 0;
}
仍然需要设置字幕、字幕和章节按钮的样式
.video-js .vjs-progress-control {
position:absolute;
width: 100%;
top:-.3em;
height:3px;
/* deal with resulting gap between progress control and control bar that
is the result of the attempt to keep things "clickable" on the controls */
background-color: #2B333F;
background-color: rgba(43, 51, 63, 0.7);
}
.video-js .vjs-progress-holder {
position:absolute;
margin:0px;
top:0%;
width:100%;
}
这似乎解决了我在使用从 video.js 继承的 :hover
样式的其他浏览器中遇到的问题。更熟练的 css
开发人员可能能够使扩展成为自下而上的扩展,从而无需围绕进度控件的位置和颜色进行花哨的步法。
这是一个最小的自定义皮肤(在 scss 中),它在其余控件上方显示全角进度条。这适用于 video.js 5.19.2
.video-js.vjs-custom-skin {
.vjs-custom-control-spacer {
display: flex;
flex: 1 1 auto;
}
.vjs-time-divider {
display: inherit;
}
.vjs-current-time {
margin-left: 1em;
}
.vjs-current-time, .vjs-duration {
display: inherit;
padding: 0;
}
.vjs-remaining-time {
display: none;
}
.vjs-play-progress:before {
display: none;
}
.vjs-progress-control {
position: absolute;
left: 0;
right: 0;
width: 100%;
height: .5em;
top: -.5em;
&:hover {
height: 1.5em;
top: -1.5em;
}
}
.vjs-progress-holder {
margin: 0;
height: 100%;
}
}