移動端關於video標籤視屏全屏播放的兼容適配問題

之前做一個項目,需要在兩個大屏之間加一屏的視頻,效果類似三屏豎方向的翻頁,只是中間是一個視頻,本以爲如此簡單三兩下搞定。沒想到。。。

原因在於,IOS與Android對video標籤的支持不同,在IOS運行的好好的,放到Android中就各種問題。

一般video標籤長這樣:

        <video
                id="video"
                src=""
                preload="auto"
                webkit-playsinline="true"
                playsinline="true"
                x5-video-player-type="h5"
                x5-video-player-fullscreen="true"
                style="object-fit:fill"
                poster="../assets/images/poster.jpg"
        ></video>

 解釋一下某幾個屬性:

webkit-playsinline:可以使視頻內聯播放(解決IOS端,Android不支持);

x5-video-player-type=“true”,x5-video-player-fullscreen="true":這兩個可以讓Android的視頻同層播放(IOS不支持)

style="object-fit:fill":視頻充滿容器

Android會調起自帶播放器並在頂層播放,這是無法避免的,頭部會有自帶的控件,如此一來需要用戶收到點擊收起全屏播放,回到主體頁面,需要監聽當頁面播放完畢事件。

           video.addEventListener('ended', function () {
              //....
            }, false)

但當你點擊退出全屏的時候你會發現ended事件又觸發了一次。這樣一來Android端其實會觸發兩次ended事件。

解決方法是判斷終端:

    function equipment() {
        var u = navigator.userAgent, app = navigator.appVersion;
        var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g
        var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端
        if (isAndroid) {
          console.log('android')
        }
        if (isIOS) {
          console.log('ios')
        }
      }

當爲ios端是監聽ended事件,當爲android的時候監聽 x5videoexitfullscreen,這個事件會在點擊退出全屏播放的 '<' 箭頭時觸發。

這樣就可以回到主體頁面繼續執行其他任務。

        if (isAndroid) {
            video.addEventListener("x5videoexitfullscreen", function () {
              // ...
            }, false)
          }

        if (isIOS) {
            video.addEventListener("ended", function () {
              // ...
            }, false)
          }

總的來說IOS全屏播放還是很容易實現的,android還是要具體再做調整。

如有更優方法,請留言告知。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章