从 2017 年 4 月开始,Android O 版 Chrome 支持画中画。
借助它,用户可以在不受其他窗口遮挡的小叠加窗口中播放 <video>
元素,这样他们就可以一边观看视频,一边执行其他操作。
其运作方式如下:打开 Chrome,转到包含视频的网站,然后全屏播放。然后,按主屏幕按钮前往 Android 主屏幕,正在播放的视频将自动切换到画中画模式。仅此而已!很酷吧?
是的,但桌面设备呢?如果网站想要控制该体验,该怎么办?
好消息是,我们正在起草 Picture-in-Picture Web API 规范。本规范旨在通过向 API 公开以下属性集,使网站能够启动和控制此行为:
- 在视频进入和退出画中画模式时通知网站。
- 允许网站通过用户手势在视频元素上触发画中画。
- 允许网站退出画中画模式。
- 允许网站检查是否可以触发画中画模式。
具体可能如下所示:
<video id="video" src="https://example.com/file.mp4"></video>
<button id="pipButton"></button>
<script>
// Hide button if Picture-in-Picture is not supported.
pipButton.hidden = !document.pictureInPictureEnabled;
pipButton.addEventListener('click', function() {
// If there is no element in Picture-in-Picture yet, let's request Picture
// In Picture for the video, otherwise leave it.
if (!document.pictureInPictureElement) {
video.requestPictureInPicture()
.catch(error => {
// Video failed to enter Picture-in-Picture mode.
});
} else {
document.exitPictureInPicture()
.catch(error => {
// Video failed to leave Picture-in-Picture mode.
});
}
});
</script>
反馈
您觉得如何?请在 Picture-in-Picture WICG 代码库中提交反馈并提出问题。我们非常期待收到您的反馈!
防止 Android 的默认 PIP 行为
目前,您可以通过响应大小调整事件并检测窗口大小发生显著变化的时间,阻止视频在 Chrome 中使用 Android 的默认画中画行为(请参阅以下代码)。我们不建议将此作为永久性解决方案,而是在实现 Web API 之前提供临时方案。
// See whether resize is small enough to be PiP. It's a hack, but it'll
// work for now.
window.addEventListener('resize', function() {
if (!document.fullscreenElement) {
return;
}
var minimumScreenSize = 0.33;
var screenArea = screen.width * screen.height;
var windowArea = window.outerHeight * window.outerWidth;
// If the size of the window relative to the screen is less than a third,
// let's assume we're in PiP and exit fullscreen to prevent Auto PiP.
if ((windowArea / screenArea) < minimumScreenSize) {
document.exitFullscreen();
}
});