微信小程序audio組件在ios端無(wú)法播放的解決辦法
解決方法: 給 audio 組件綁定點(diǎn)擊事件,手動(dòng)觸發(fā)播放暫停方法!
代碼片段:
wxml文件
<!-- 判斷是語(yǔ)音通話,有通話記錄,通話描述不包含'未接' --> <view class="reference" wx:if="{{itemList.activity_type === 'phone' && itemList.activity_reference_id && tool.indexOf(itemList.comment,'未接') === -1 }}"> <!-- 語(yǔ)音播放 --> <van-button class="ref-btn" wx:if="{{audioResourceMaps[itemList.activity_reference_id] === undefined}}" loading="{{itemList.activity_reference_id === currentGettingReferenceId}}" icon="play" type="info" plain data-reference-id="{{itemList.activity_reference_id}}" bindtap="getReference"> </van-button> <view wx:else class="audio-box"> <!-- 語(yǔ)音播放暫停 --> <van-button class="ref-btn" wx:if="{{audioResourceMaps[itemList.activity_reference_id]}}" data-reference-id="{{itemList.activity_reference_id}}" icon="pause" type="info" plain bindtap="pauseAudio"/> <!-- 點(diǎn)擊沒(méi)有通話錄音 --> <span wx:else class="no-audio-text">未找到通話錄音</span> </view> </view>
wxss文件
.reference { margin-top: 20rpx; height: 100%; padding: 5rpx; box-sizing: border-box; } .ref-btn { width: 80rpx; height: 80rpx; display: flex; } .ref-btn button { width: 80rpx; height: 80rpx; border-radius: 50%; }
js文件
/** * 組件的初始數(shù)據(jù) */ data: { currentGettingReferenceId: null, //正在播放的音頻id audioResourceMaps: {}, //點(diǎn)擊過(guò)的音頻列表 isPause:false, // 是否暫停 }, /** * 組件的生命周期 */ lifetimes: { attached: function () { // 因?yàn)槭亲咏M件 所以要在這里獲取實(shí)例 this.audioContext = wx.createInnerAudioContext(); }, detached: function () { // 停止播放 this.stopAudio() // 在組件實(shí)例被從頁(yè)面節(jié)點(diǎn)樹(shù)移除時(shí)執(zhí)行 }, }, methods: { // 獲取錄音 getReference(e) { let id = e.target.dataset.referenceId if(id != this.data.currentGettingReferenceId){ this.stopAudio() } this.setData({ currentGettingReferenceId:id }) // 點(diǎn)擊獲取錄音url的接口。 接口請(qǐng)求根據(jù)自己的封裝來(lái)寫 WXAPI.getResourceUrl( `/conversation/conversationsession/${id}/`, { data_type: 'all', }).then(({resource_url}) => { console.log('音頻地址====',resource_url,) let url = resource_url && resource_url.indexOf('https://') > -1? encodeURI(resource_url) : null this.data.audioResourceMaps[id] = url; if(resource_url) this.playAudio(id,url) this.setData({ audioResourceMaps: this.data.audioResourceMaps }) console.log('播放過(guò)的列表=====',this.data.audioResourceMaps) }).catch(function (e) { console.log(e) }) }, // 暫停 pauseAudio(){ this.setData({ isPause: !this.data.isPause }) let id = this.data.currentGettingReferenceId console.log(id,'播放暫停的id') const innerAudioContext = this.audioContext if(this.data.isPause){ innerAudioContext.pause() console.log('暫停播放') }else{ innerAudioContext.play() console.log('繼續(xù)播放') } }, // 停止播放 stopAudio(){ const innerAudioContext = this.audioContext innerAudioContext.stop() let obj = this.data.audioResourceMaps for(let item in obj){ delete obj[item] } // 停止播放就要把播放列表id對(duì)應(yīng)的音頻地址做清空處理 this.setData({ audioResourceMaps: obj, currentGettingReferenceId:null }) console.log('停止播放') }, // 播放 playAudio(id,url) { const innerAudioContext = this.audioContext console.log(url, '音頻的地址') if(url){ innerAudioContext.src = url innerAudioContext.play() innerAudioContext.onPlay(() => { console.log('開(kāi)始播放') }) innerAudioContext.onTimeUpdate(() => { console.log(innerAudioContext.duration,'總時(shí)長(zhǎng)') console.log(innerAudioContext.currentTime,'當(dāng)前播放進(jìn)度') }) setTimeout(() => { console.log(innerAudioContext.duration,'總時(shí)長(zhǎng)') console.log(innerAudioContext.currentTime,'當(dāng)前播放進(jìn)度') }, 500) innerAudioContext.onEnded(() => { let obj = this.data.audioResourceMaps for(let item in obj){ delete obj[item] } this.setData({ audioResourceMaps: obj, currentGettingReferenceId:null }) console.log('播放完畢') }) innerAudioContext.onError((res) => { console.log(res.errMsg) console.log(res.errCode) }) } }
效果圖
⚠️微信小程序中使用vant,必須要在.json 文件中引用 不然標(biāo)簽不會(huì)顯示哦
我是在app.json文件引得 全局可用
"usingComponents": { "van-button": "@vant/weapp/button/index", "van-icon": "@vant/weapp/icon/index", }
官網(wǎng)文檔:developers.weixin.qq.com/miniprogram…
總結(jié)
到此這篇關(guān)于微信小程序audio組件在ios端無(wú)法播放解決的文章就介紹到這了,更多相關(guān)小程序audio組件ios端播放內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序表單驗(yàn)證插件WxValidate的二次封裝功能(終極版)
這篇文章主要介紹了微信小程序表單驗(yàn)證插件WxValidate的二次封裝功能(終極版),文中給大家提到了最終版與前面2版的不同點(diǎn),需要的朋友可以參考下2019-09-09兩種js監(jiān)聽(tīng)滾輪事件的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇兩種js監(jiān)聽(tīng)滾輪事件的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05微信小程序?qū)W習(xí)筆記之本地?cái)?shù)據(jù)緩存功能詳解
這篇文章主要介紹了微信小程序?qū)W習(xí)筆記之本地?cái)?shù)據(jù)緩存功能,結(jié)合實(shí)例形式分析了微信小程序wx.setStorage、wx.getStorage以及wx.removeStorage、wx.clearStorage針對(duì)數(shù)據(jù)緩存的存取、刪除等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03詳解webpack的clean-webpack-plugin插件報(bào)錯(cuò)
這篇文章主要介紹了詳解webpack的clean-webpack-plugin插件報(bào)錯(cuò),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10JavaScript插入動(dòng)態(tài)樣式實(shí)現(xiàn)代碼
能夠把CSS樣式包含到HTML頁(yè)面中的元素有兩個(gè)。其中,<link>元素用于包含來(lái)自外部的文件,而<style>元素用于指定嵌入的樣式2012-02-02Bootstrap框架結(jié)合jQuery仿百度換膚功能實(shí)例解析
這篇文章主要為大家詳細(xì)介紹了Bootstrap框架結(jié)合jQuery仿百度換膚功能實(shí)現(xiàn)代碼解析,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09如何實(shí)現(xiàn)小程序tab欄下劃線動(dòng)畫效果
這篇文章主要介紹了如何實(shí)現(xiàn)小程序tab欄下劃線動(dòng)畫效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05JS代碼隨機(jī)生成姓名、手機(jī)號(hào)、身份證號(hào)、銀行卡號(hào)
下面小編自己寫的一個(gè)js生成器代碼,代碼比較簡(jiǎn)單,實(shí)用性非常高,感興趣的朋友一起學(xué)習(xí)吧2016-04-04