视频画中画Web API粗略
这篇文章由 DeathGhost 编辑,发布于
归类于 Javascript » 👋分享到微博 当前评论 0 条。
视频画中画,用户在浏览web页面信息时,可将视频弹出到一个悬浮可随意拖放的一个顶层小窗口,可继续阅读页面其他信息或进行其他操作。
Web视频页面中,我们常常会在用户可操作区域看到“画中画”功能操作,点击进入画中画模式后,视频会被置顶默认于屏幕右下角位置,便于我们进行其他阅读或操作(例如:优酷视频中等等相关视频站点)。
我们可以通过画中画Web API 中提供的一些方法去修改画中画模式的默认方法。例如,我们可以在页面中添加按钮,触发进入画中画模式与退出画中画默认一般。
<video src="20190116_084805.mp4" controls id="video"></video>
<button id="enter">进入画中画</button>
<button id="exit">退出画中画</button>
默认情况下,我们在视频元素中右键菜单项中含有“画中画”选项,点击即可进入画中画模式,关闭或返回标签页将退出画中画模式。
这是默认操作。
那么如果我们需要通过JavaScript进行操作,又该如何呢?
进入与退出画中画模式
video.requestPictureInPicture()
document.exitPictureInPicture()
字面意思我们可以看出为进入画中画与退出画中画模式操作。
所以,实际运用中,我们就可以定义事件对其操作。如同:
// 进入画中画
enter.addEventListener('click', () => {
video.requestPictureInPicture().catch(error => {
console.log(error);
});
});
// 退出画中画
exit.addEventListener('click', () => {
document.exitPictureInPicture().catch(error => {
console.log(error);
});
});
添加catch捕获潜在错误,如:已退出画中画模式,若再次点击,控制台则出错。
画中画活动状态
我们可以通过enterpictureinpicture与leavepictureinpicture事件检测视频何时进入或退出画中画模式。
下面我们给其添加一个文本提示
// 事件检测 进入/退出
video.addEventListener('enterpictureinpicture', () => {
tips.textContent = '已进入画中画模式';
});
video.addEventListener('leavepictureinpicture', () => {
tips.textContent = '已退出画中画模式';
});
同时,我们可以返回其画中画的尺寸
video.addEventListener('enterpictureinpicture', (event) => {
console.log(`画中画窗口大小:${event.pictureInPictureWindow.width} * ${event.pictureInPictureWindow.height}`);
});
禁用视频中的画中画
如果不希望视频弹出于画中画,禁止右键菜单中的画中画,那么,我们可以在视频元素中添加disablePictureInPicture
属性即可。
<video disablePictureInPicture src="20190116_084805.mp4" controls id="video"></video>
完整demo内容,具体可以添加一个本地小视频测试。
<video disablePictureInPicture src="20190116_084805.mp4" controls id="video"></video>
<button id="enter">进入画中画</button>
<button id="exit">退出画中画</button>
<span id="tips"></span>
<script>
const video = document.getElementById('video');
const enter = document.getElementById('enter');
const exit = document.getElementById('exit');
const tips = document.getElementById('tips');
// 进入画中画
enter.addEventListener('click', () => {
video.requestPictureInPicture().catch(error => {
console.log(error);
});
});
// 退出画中画
exit.addEventListener('click', () => {
document.exitPictureInPicture().catch(error => {
console.log(error);
});
});
// 事件检测 进入/退出
video.addEventListener('enterpictureinpicture', (event) => {
console.log(`画中画窗口大小:${event.pictureInPictureWindow.width} * ${event.pictureInPictureWindow.height}`);
tips.textContent = '已进入画中画模式';
});
video.addEventListener('leavepictureinpicture', () => {
tips.textContent = '已退出画中画模式';
});
</script>
不知不觉已经一点钟了,晚安!(~﹃~)~zZ