解決ios微信下vue項目組件切換并自動播放音頻問題
最近在做一個英語答題項目 , 項目需求是通過答題取的成績 , 答題的題型是分為 , 聽音選圖 , 看圖選詞 , 和填空題 . 項目總共分為了3個頁面 , 開始頁 ,答題頁 和結(jié)束頁面 ,答題頁關(guān)于每種題型 , 我做了相應(yīng)的組件 , 每次切換題目的時候 ,顯示對應(yīng)的的組件 , 要求聽音選圖的時候會自動播放音頻 .
慣例 , ios下的safari和微信內(nèi)置瀏覽器都不支持audio的自動播放 , 通常的解決方案都是通過 document.addEventListener('WeixinJSBridgeReady',function(){audio.play()},false
) 來實現(xiàn)的自動播放 , 但是 WeixinJSBridgeReady 事件從頁面加載開始到結(jié)束只會加載一次 , 而且不能通過 removeEventListener
來移除 , 所以會有兩個問題:
1.從首頁面到答題頁面是路由切換的 , 但是處于開始頁面時候 , WeixinJSBridgeReady這個事件已經(jīng)加載完了 , 跳轉(zhuǎn)到答疑頁面的時候已經(jīng)無法監(jiān)聽到該事件了;
2.首頁就是答題頁面的時候,在題型組件切換的時候只會在第一次加載聽力題型的時候會自動播放 , 再次切換到這種題目的時候無法再次自動播放 .
經(jīng)過不斷的測試 , 發(fā)現(xiàn)ios下不支持的原因是 不支持動態(tài)創(chuàng)建的audio標(biāo)簽自動播放 , 包括頁面第一次加載 , 所以轉(zhuǎn)化了思路 ,把audio標(biāo)簽放在頂層的App.vue里面 , 不隨著組件的切換創(chuàng)建和銷毀 , 然后在App.vue里面寫一個的方法 , 接受src和callback的參數(shù) , 在main.js掛在全局上, 每次切換的時候 ,調(diào)用該方法傳入對應(yīng)的src , 代碼如下:App.vue
(關(guān)于為什么用document.getElementById , 其實本來是準(zhǔn)備用$refs的 , 但是不知為何在app.vue中無法獲取 , 控制臺打印的$ref能看到有audio 了, 但是不可讀)
main.js
組件內(nèi):
這里要注意的兩點: 1.app.vue中的audio標(biāo)簽必須設(shè)置 controls , 然后通過css隱藏該audio ,否則無法播放 ;
2.在頁面加載的時候需要通過 監(jiān)聽 document.addEventListener('WeixinJSBridgeReady',function(){audio.load()},false) 讓audio.load()
加載一次 ,否則后續(xù)也無法自動播放 ;
總結(jié)
以上所述是小編給大家介紹的解決ios微信下vue項目組件切換并自動播放音頻問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
詳解IOS串行隊列與并行隊列進(jìn)行同步或者異步的實例
這篇文章主要介紹了詳解IOS串行隊列與并行隊列進(jìn)行同步或者異步的實例的相關(guān)資料,IOS中GCD的隊列分為串行隊列和并行隊列,任務(wù)分為同步任務(wù)和異步任務(wù),他們的排列組合有四種情況這里就一一分析下,需要的朋友可以參考下2017-07-07關(guān)于iOS自適應(yīng)cell行高的那些事兒
這篇文章主要給大家介紹了關(guān)于iOS自適應(yīng)cell行高的那些事兒,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一看看吧2018-11-11IOS 開發(fā)之對象為空的判斷(nil、null)詳解
這篇文章主要介紹了IOS 開發(fā)之對象為空的判斷(nil、null)詳解的相關(guān)資料,需要的朋友可以參考下2017-02-02