小程序音频播放带进度

wxml

<view class="page">
    
<view wx:if="{{ paused }}" class="audio-btn" bindtap="audioPlay">播放</view>
<view wx:else class="audio-btn btn-pause" bindtap="audioPause">暂停</view>
                          
<!-- 时长 -->
<view class="audio-number">{{forNowTime?forNowTime:0}}s</view>
<slider class="audio-slider" activeColor="#5189FF" block-size="12" value="{{current}}" max="{{duration}}" step="0.01" bindchanging="audioChanging" bindchange="audioChange">
</slider>
    <view class="audio-number">{{forAllTime?forAllTime:0}}s</view>
</view>

index.js

const myAudio = wx.createInnerAudioContext()
myAudio.src="/pages/index/car.mp3";
Page({
    data:{
        forNowTime: '0', //当前播放时间
        forAllTime: '0', //总时长
        current: 0, //slider当前进度
        duration: 0, //总时间 秒
        seek: false, //是否处于拖动状态
        paused: true, //是否处于暂停状态
     },
     onLoad: function (options) {// 音频播放初始化
        this.audioInit()   
     }, 
     onReady:function(){
         myAudio.play();
         this.setData({
             paused:false
         })
     },
     audioInit() {
        myAudio.playbackRate = 1.0
         myAudio.onPlay(() => {
            console.log('开始播放')
           console.log(myAudio.playbackRate);
         })
         // 暂停监听
          myAudio.onPause(() => {
              console.log('停止播放')
          })
          // 监听音频进入可以播放状态的事件。但不保证后面可以流畅播放,必须要这个监听,不然播放时长更新监听不会生效,不能给进度条更新值
         myAudio.onCanplay(() => {
            myAudio.duration
         })
                // 播放时长更新监听
        myAudio.onTimeUpdate(() => {
            // 监听播放进度,更新页面播放时长和进度条进度
            this.setData({
                forNowTime: parseInt(myAudio.currentTime),
                forAllTime: parseInt(myAudio.duration),
                current: myAudio.currentTime,
                duration: myAudio.duration
            })
        })
        // 播放出错监听
        myAudio.onError((res) => {
            console.log(res.errMsg)
            console.log(res.errCode)
        })
            
     },
     audioPlay:function(){
         this.setData({ 
              paused:false
         })
         myAudio.play()
     },
     audioPause:function(){
         this.setData({
             paused:true
         });
         myAudio.pause();
     },
     audioChanging(val) {
        myAudio.seek(val.detail.value);
        this.setData({
            forNowTime: parseInt(val.detail.value)
        })

     },
     audioChange(val) {
        myAudio.seek(val.detail.value)
     },
     onUnload: function () {
        this.audioPause()
        myAudio.stop()
     }
  })

 参考来源:

微信小程序音频播放 InnerAudioContext 的用法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值