解決ios微信下vue項(xiàng)目組件切換并自動(dòng)播放音頻問(wèn)題
最近在做一個(gè)英語(yǔ)答題項(xiàng)目 , 項(xiàng)目需求是通過(guò)答題取的成績(jī) , 答題的題型是分為 , 聽(tīng)音選圖 , 看圖選詞 , 和填空題 . 項(xiàng)目總共分為了3個(gè)頁(yè)面 , 開(kāi)始頁(yè) ,答題頁(yè) 和結(jié)束頁(yè)面 ,答題頁(yè)關(guān)于每種題型 , 我做了相應(yīng)的組件 , 每次切換題目的時(shí)候 ,顯示對(duì)應(yīng)的的組件 , 要求聽(tīng)音選圖的時(shí)候會(huì)自動(dòng)播放音頻 .
慣例 , ios下的safari和微信內(nèi)置瀏覽器都不支持audio的自動(dòng)播放 , 通常的解決方案都是通過(guò) document.addEventListener('WeixinJSBridgeReady',function(){audio.play()},false) 來(lái)實(shí)現(xiàn)的自動(dòng)播放 , 但是 WeixinJSBridgeReady 事件從頁(yè)面加載開(kāi)始到結(jié)束只會(huì)加載一次 , 而且不能通過(guò) removeEventListener 來(lái)移除 , 所以會(huì)有兩個(gè)問(wèn)題:
1.從首頁(yè)面到答題頁(yè)面是路由切換的 , 但是處于開(kāi)始頁(yè)面時(shí)候 , WeixinJSBridgeReady這個(gè)事件已經(jīng)加載完了 , 跳轉(zhuǎn)到答疑頁(yè)面的時(shí)候已經(jīng)無(wú)法監(jiān)聽(tīng)到該事件了;
2.首頁(yè)就是答題頁(yè)面的時(shí)候,在題型組件切換的時(shí)候只會(huì)在第一次加載聽(tīng)力題型的時(shí)候會(huì)自動(dòng)播放 , 再次切換到這種題目的時(shí)候無(wú)法再次自動(dòng)播放 .
經(jīng)過(guò)不斷的測(cè)試 , 發(fā)現(xiàn)ios下不支持的原因是 不支持動(dòng)態(tài)創(chuàng)建的audio標(biāo)簽自動(dòng)播放 , 包括頁(yè)面第一次加載 , 所以轉(zhuǎn)化了思路 ,把a(bǔ)udio標(biāo)簽放在頂層的App.vue里面 , 不隨著組件的切換創(chuàng)建和銷(xiāo)毀 , 然后在App.vue里面寫(xiě)一個(gè)的方法 , 接受src和callback的參數(shù) , 在main.js掛在全局上, 每次切換的時(shí)候 ,調(diào)用該方法傳入對(duì)應(yīng)的src , 代碼如下:App.vue


(關(guān)于為什么用document.getElementById , 其實(shí)本來(lái)是準(zhǔn)備用$refs的 , 但是不知為何在app.vue中無(wú)法獲取 , 控制臺(tái)打印的$ref能看到有audio 了, 但是不可讀)
main.js
組件內(nèi):
這里要注意的兩點(diǎn): 1.app.vue中的audio標(biāo)簽必須設(shè)置 controls , 然后通過(guò)css隱藏該audio ,否則無(wú)法播放 ;
2.在頁(yè)面加載的時(shí)候需要通過(guò) 監(jiān)聽(tīng) document.addEventListener('WeixinJSBridgeReady',function(){audio.load()},false) 讓audio.load()加載一次 ,否則后續(xù)也無(wú)法自動(dòng)播放 ;
總結(jié)
以上所述是小編給大家介紹的解決ios微信下vue項(xiàng)目組件切換并自動(dòng)播放音頻問(wèn)題,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- vue使用keep-alive實(shí)現(xiàn)組件切換時(shí)保存原組件數(shù)據(jù)方法
- 移動(dòng)端底部導(dǎo)航固定配合vue-router實(shí)現(xiàn)組件切換功能
- vue.js 動(dòng)態(tài)組件詳解
- vue使用動(dòng)態(tài)組件實(shí)現(xiàn)TAB切換效果
- vue3的動(dòng)態(tài)組件是如何工作的
- vue中keep-alive內(nèi)置組件緩存的實(shí)例代碼
- vue keep-alive 動(dòng)態(tài)刪除組件緩存的例子
- vue服務(wù)端渲染頁(yè)面緩存和組件緩存的實(shí)例詳解
- vue 指定組件緩存實(shí)例詳解
- 有關(guān)vue 組件切換,動(dòng)態(tài)組件,組件緩存
相關(guān)文章
iOS開(kāi)發(fā)中蘋(píng)果輸入手機(jī)號(hào)變用戶(hù)的名字
今天我們的用戶(hù)輸入手機(jī)號(hào)之后變成了用戶(hù)的名字,沒(méi)辦法獲取驗(yàn)證碼,因?yàn)槭謾C(jī)格式不對(duì)。下面通過(guò)本文給大家分享開(kāi)發(fā)中蘋(píng)果輸入手機(jī)號(hào)變用戶(hù)的名字,需要的朋友可以參考下2017-05-05
快速解決iOS10不能跳轉(zhuǎn)系統(tǒng)WiFi列表的問(wèn)題
下面小編就為大家?guī)?lái)一篇快速解決iOS10不能跳轉(zhuǎn)系統(tǒng)WiFi列表的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
IOS開(kāi)發(fā)中的設(shè)計(jì)模式匯總
在ios的程序開(kāi)發(fā)中,經(jīng)常搞暈ios的開(kāi)發(fā)模式,今天小編就給大家簡(jiǎn)單的總結(jié)一下,需要的的朋友參考下2017-03-03

