關於音頻自動播放的問題


之前工作中遇到的音頻文件在移動端不能自動播放的問題,后來發現在pc端初始頁面第一次加載頁面的時候(注意:是沒有緩沖的情況下),這個時候音頻也是無法自動播放的,會在控制台輸出錯誤:如圖

翻譯錯誤代碼:Uncaught (in promise) DOMException: play()失敗,因為用戶沒有首先與文檔交互。

也就是說音頻還沒有被加載

**以下是看了別人文章后的個人感悟,如果有錯誤的地方,請各位大神指教!**
如有更好的方法,歡迎留言!

問題代碼:

  html部分

  <audio src="img/myDream.m4a" preload="none" id="musicAudio"></audio>

  <!--

preload="none"是為了防止頁面還沒顯示出來就播放了音樂

-->

js部分
let  musbox=document.getElementById('musicAudio');//獲取到元素
musbox.play();//初始頁面沒有緩沖的時候,是無法出發play的,因為音頻文件此時還沒有,會報上面截圖的錯誤

musbox.oncanplay=function () { //當前音頻可以播放觸發的事件(資源可能沒有加載完成,隨播放隨加載)
//以下是 音頻可以播放后要做的事情
     musbox.play();//這個播放是為了下次有緩存的時候能夠播放
   playBtn.className='playBtn move';

}

解決代碼:
  setTimeout(function () {
   let bon=musbox.play();//獲取到的是一個promise

//promise擁有then和catch方法,成功的時候調用then,失敗的時候調用catch,這里在初始的時候沒有音頻文件,所以promise狀態是失敗的
//就直接可以在失敗的時候做下處理
 bon.catch(()=>{//調用catch
     if(musbox.paused){//這里musbox.paused為ture就證明不是播放的狀態,只要不是播放的狀態就調用play讓其播放
           musbox.play();
        }
     })
},1000);
musbox.oncanplay=function () { //因為上面已經播放,這里自然是已經觸發了能夠播放的事件
       musbox.play();
    playBtn.className='playBtn move';}

移動端中是禁止音頻自動播放的:

QQ中可以正常播放

微信中需要加代碼:
document.addEventListener("WeixinJSBridgeReady", function () {
   musbox.play();
}, false);
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM