問題描述
在微信小程序中經(jīng)常會用到控制文件播放的滑塊,通過滑塊可控制音頻播放進度,下面即用代碼實現(xiàn)。
解決方案
首先用.wxml與.wmss代碼實現(xiàn)進度條的效果,再通過.js文件控制進度條的進度和進度條的時間顯示。
.wxml中(播放進度結(jié)構(gòu)的代碼):
<view class="content-play-progress"> <text>{{play.currentTime}}</text> <view> <slider activeColor="#d33a31" block-size="12" backgroundColor="#dadada" value="{{play.percent}}"/> </view> <text>{{play.duration}}</text> </view> |
在上述代碼中,第五行用到了slider組件,其值為播放進度play.percent。
.wxss中(播放進度樣式的代碼):
.content-play-progress{ display: flex; align-items: center; margin: 0 35rpx; font-size: 9pt; text-align: center; } .content-play-progress>view{ flex: 1; } |
保存上述代碼后,運行程序,效果如圖:
圖 1 微信小程序進度條的實現(xiàn)
.js中(控制進度條的進度和時間的代碼):
onReady: function(){ this.audioCtx=wx.createInnerAudioContext() var that=this //播放失敗檢測 this. audioCtx.onError(function(){ console.log(‘播放失敗:’+that.audioCtx.src) }) //播放完成自動換下一曲 this. audioCtx.OnEnded(function(){ that.next() }) //自動更新播放進度 this. audioCtx.onPlay(function(){ this. audioCtx.onTimeUpdate(function(){ that.setData({ ‘play.duration’: formatTime(that.audioCtx.duration), ‘play.currrentTime’: formatTime(that.audioCtx. currrentTime), ‘play.percent’: that.audioCtx. currrentTime / that.audioCtx.duration*100 }) }) //默認選擇第一曲 This.setMusic(0) //格式化時間 function formatTime(time){ var minute=Math.floor(time/60)%60; var second=Math.floor(time)%60 return (minute<10?’0’+minute:minute)+’:’+ (second<10?’0’+second:second) } }) } |
上述代碼中,通過調(diào)用audioCtx的onTimeUpdate()的方法,獲取音視頻狀態(tài)信息,并通過formatTime()函數(shù)處理時間格式,最后渲染到頁面實現(xiàn)實時更新效果,效果如圖:
圖 2 微信小程序進度條的滑動
在slider組件上綁定bindchange事件,可以實現(xiàn)滑動進度條調(diào)節(jié)音視頻文件播放進度,代碼示例:
<slider bindchange=”sliderChange” activeColor=”#d33a31” block-size=”12” backgroundColor=”#dadada” value=”{{play.percent}}”/ > |
在.js文件中編寫sliderChange函數(shù)獲取用戶當(dāng)前選擇的進度,將時間通過audioCtx對象的seek()方法進行設(shè)置,代碼示例:
sliderChange: function(e){ var second=e.detail.value* that.audioCtx.duration/100 that.audioCtx.seek(secend) }, |