自 2017 年 4 月起,Android O 版 Chrome 支援 Picture-in-Picture 功能。使用者可以在不受其他視窗遮蔽的小型疊加式視窗中播放 <video>
元素,這樣一來,使用者就能一邊觀看影片,一邊做其他事。
運作方式如下:開啟 Chrome,前往含有影片的網站,然後以全螢幕播放影片。接著按下主畫面按鈕,即可前往 Android 主畫面,播放中的影片會自動切換為子母畫面。就這樣!很酷吧?
是的,但電腦版呢?如果網站想要控管這項體驗,該怎麼辦?
好消息是,我們正在起草子母畫面 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();
}
});