文件 2.2.8

行動裝置全螢幕

本頁說明 full 按鈕在桌面與行動裝置上的不同處理方式,以及行動裝置上隱藏全螢幕播放器的同步機制。

裝置判斷

FlexPlyr 在載入時以 User-Agent 判斷裝置(src/js/main.js):

旗標 條件
isMobile UA 含 iphone、ipad、ipod、android
isIOS UA 含 iphone、ipad、ipod

桌面版

full 按鈕對 .FPlyr 容器呼叫 requestFullscreen(含 webkit/moz/ms 前綴版本),再按一次呼叫 exitFullscreen,並同步更新 player.stateFull。

行動裝置

行動裝置的內嵌影片受 playsinline 限制,無法讓自訂面板跟著進入全螢幕,因此 FlexPlyr 另建一個隱藏的全螢幕播放器(class PDFullPlayer,以 CSS 移出畫面):

來源 全螢幕播放器 進入方式
video 第二個 <video>,不帶 playsinline full → 暫停主播放器 → play(true) 播放全螢幕播放器,系統原生進入全螢幕
youtube 第二個 YT.Player,playsinline: 0 同上;全螢幕播放器尚未 onReady 時 play(true) 會跳出 alert("not Ready")
vimeo 不另建,沿用主播放器 play(true) 先 requestFullscreen() 再播放
audio 無 full 按鈕不渲染

進出全螢幕的同步

時機 處理
全螢幕播放器開始播放(video playing/YouTube 狀態 3) 暫停主播放器,把主播放器的進度、音量、倍速套到全螢幕播放器後播放
全螢幕播放器暫停(離開全螢幕) 把全螢幕播放器的進度、音量、倍速寫回主播放器並更新面板進度
iOS webkitpresentationmodechanged/其他 fullscreenchange 更新 player.stateFull

行動裝置上點擊影片畫面不會切換播放,只有面板按鈕有作用。

範例

桌面瀏覽器不會建立全螢幕播放器;在 iOS/Android 開啟本頁時數量為 1:

<div style="height: 240px"><div id="player"></div></div>
<script>
  const player = new FPlyr({
    id: "player",
    video: "https://cdn.pixabay.com/video/2023/11/28/191159-889246512_tiny.mp4",
    option: { panelItem: ["play", "progress", "full"] },
  });
  console.log("hidden fullscreen players:", document.querySelectorAll(".PDFullPlayer").length);
  console.log("stateFull:", player.stateFull);
</script>
即時預覽 · @pardnchiu/flexplyr@2.2.9

已知問題

行動裝置偵測到已在全螢幕時,full 按鈕會呼叫 player.mobilePause()(src/js/model/playerPanel.js:167),但 FPlyr 沒有這個方法,點擊會拋出 TypeError。

相關頁面

EN