最近一个需求,由于给定的视频资源是竖屏,而UI给定的设计图是横屏(竖屏不美观),导致最终定下的需求是:点击播放按钮,自动全屏播放。
至于为什么花了这么久,主要原因是开始感觉这个需求比较简单,完全可以直接使用video标签实现,不用插件,然而倒腾了半天,网上查了大堆资料,始终无法实现,具体原因目前仍不清楚,貌似跟浏览器内核有关?稍后继续研究去。
先上图
点击之后自动全屏
补充一下遇到的坑:
可以看到,播放器的高度大于封面高度,(本来是刚好的),这里有个地方的设置会影响播放器的高度,playerOptions中的aspectRatio,当设置为4:3的时候就是上图这样了,当时手欠给改了这里,结果找了半天原因。。。
代码:
vue怎么使用video-player这里就不详细说了,教程到处都是。
<div class="videoBox">
<video-player
class="video-player vjs-custom-skin"
ref="videoPlayer"
:playsinline="true"
:options="playerOptions"
@play="onPlayerPlay($event)"
@pause="onPlayerPause($event)"
></video-player>
</div>
//data中的:
playerOptions: {
playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
autoplay: false, //如果true,浏览器准备好时开始回放。
muted: false, // 默认情况下将会消除任何音频。
loop: false, // 导致视频一结束就重新开始。
preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
language: "zh-CN",
aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
sources: [
{
type: "",
src: "xxx" //url地址
}
],
poster: "../images/posterIn.png", //你的封面地址
// width: document.documentElement.clientWidth,
notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
controlBar: {
timeDivider: true,
durationDisplay: true,
remainingTimeDisplay: false,
fullscreenToggle: true //全屏按钮
}
}
//方法
full(ele) {
//做兼容处理
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
} else if (element.oRequestFullscreen) {
element.oRequestFullscreen();
} else if (element.webkitRequestFullscreen) {
element.webkitRequestFullScreen();
} else {
var docHtml = document.documentElement;
var docBody = document.body;
var videobox = document.getElementsByClassName("video-player");
var cssText = "width:100%;height:100%;overflow:hidden;";
docHtml.style.cssText = cssText;
docBody.style.cssText = cssText;
videobox.style.cssText = cssText + ";" + "margin:0px;padding:0px;";
document.IsFullScreen = true;
}
},
onPlayerPlay(player) {
this.full(player)
},