HTML5 Audio & Video - 兼容性總結(一)

工做中的總結和記錄,第一次寫,有問題煩請指出,會持續記錄更新...

1、audio

一、監聽播放完成
android

監聽 ended 事件不許確,能夠監聽 timeupdate 事件,判斷 當前播放進度 currentTime 大於等於 總時長 duration 時,就是播放完成;ios

var oAudio = document.getElementById('audio_player');
oAudio.addEventListener('timeupdate', function () {  
  // 監聽播放完成,ended 事件不許確  
  if (oAudio.currentTime >= oAudio.duration) {    
    _this.endFn();  
  }}, 
false);複製代碼

二、設置當前音頻播放時間點web

ios系統直接設置無效,監聽canplay(可播放時)再設置currentTime才能夠;瀏覽器

if (isIos) {   
    oAudio.addEventListener('canplay', () => {       
        oAudio.currentTime = '';   
    }, { once: true })
} else {  // 安卓沒有 canplay 事件    
    oAudio.currentTime = '';
}複製代碼


三、音頻打點bash

android 音頻打點 在 play 監聽裏處理,ios 在canplay裏處理

if (isIos) {       
    oAudio.addEventListener('canplay', () => {       
         // ios 音頻打點 能夠在這裏處理
    }, { once: true })
} else {  // 安卓沒有 canplay 事件    
    oAudio.addEventListener('play', function () {        
        if (Util.isAndroid) {       
            // 打點代碼     
        }
    }, { once: true });
}

複製代碼


四、設置音頻加載 loading 效果微信

ios 可監聽 canplay 事件時移除 loading 效果,監聽 loadstart 和 loadeddata 事件時添加 loading 效果;

if (isIos) { 
    oAudio.addEventListener('loadstart', () => {    
        if (isIos) {        
            _this.isLoadaudio = true;    
        }
    }, false)
    oAudio.addEventListener('loadeddata', () => {    
        if (isIos) {        
            _this.isLoadaudio = true;    
        }
    }, false)
   
    oAudio.addEventListener('canplay', () => {        
        _tihs.isLoadaudio = false;    
    }, { once: true }
)}複製代碼

安卓不建議添加 loading 效果,由於沒有準確的事件監聽能夠移除,不然只能加上不能移除(安卓支持 loadstart 和 loadeddata,不支持 canplay)

五、關於自動播放的問題:須要觸發一次纔可播放;ide


六、多音頻 audio 實現連續播放:監聽當前音頻播放完成以後,ios 繼續用同一個 audio 播放器對象,替換成新的src播放地址,能夠實現連續播放效果;ui

<audio name="media" id="audio_player" preload>     
    <source :src="audio_url" type="audio/mpeg">
</audio>

var oAudio = document.getElementById('audio_player');
oAudio.src = self.pptData.ppt_list[index].audio_url;
oAudio.play();
複製代碼


七、設置監聽事件只執行一次,不然會執行屢次this

addEventListener 第3個參數設置爲 { once: true };

oAudio.addEventListener('play', function () {}, { once: true });複製代碼


八、監聽微信瀏覽器後臺運行時,禁止播放url

$(document).on('visibilitychange', () => {
    var isHidden = document.hidden;
    var oAudio = document.getElementById('audio_player');
    if (isHidden) { // 離開微信瀏覽器,後臺運行
        // 狀態改成暫停
    } else {  // 再次進入瀏覽器
        if (oAudio.paused) { // 鎖屏時點擊暫停了
            // 狀態改成暫停            
        } else { 
            // 狀態改成播放
        }          
    }        
})複製代碼


2、video

一、在X5內核中讓video標籤播放不自動全屏

只須要給video加上 webkit-playsinline playsinline x5-playsinline 便可(重點是x5-playsinline 起的做用)

<video class="qvideo" id="qvideo-wrap" playsinline webkit-playsinline x5-playsinline>
</video>複製代碼

注:x5內核-安卓下不能添加airplay="allow" x5-video-player-fullscreen="true" x-webkit-airplay="allow"(添加了以後playsinline屬性就失效了)


二、安卓手機上,視頻層級最高,其它彈窗等會被遮擋;

可在彈窗等出現的時候,視頻高度設置爲0;
相關文章
相關標籤/搜索