原生微信小程序,多音频播放实现进度条功能

这篇具有很好参考价值的文章主要介绍了原生微信小程序,多音频播放实现进度条功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

小程序的音频组件没有进度条的功能,业务需要,只好烧脑自己实现。

逻辑思路:

1.所有音频播放、停止按钮使用状态切换控制
2.当点击某个音频播放时,首先将所有音频的状态置为停止状态,然后将当前音频置为播放状态
3.滚动条插件配合音频控件一起使用
4.播放状态时滚动条的长度随音频进度变化而变化,时间只需要显示总时长
5.拖动滚动条时,音频的播放当前位置的声音

UI设计效果:

原生微信小程序,多音频播放实现进度条功能

 代码如下:

<view wx:if="{{currentIndex == index}}" class="sliderBox">
      <slider class="slider_middle" catchchange="changeSlide" bindtouchstart="start"             bindtouchend="end" max="{{item.duration}}" min="0" value="{{item.currentProcessNum}}" block-size="12" data-index="{{index}}" activeColor="#F19831" block-color="#F19831"></slider>
       <text class="right_text">{{item.showTotalTime}}</text>
</view>


<image src="../../images/img/{{item.showAudio ? 'suspend_cheng' : 'play_cheng'}}.png" mode="widthFix" class="play_cheng" style="margin-top: {{currentIndex == index ? 54 : 34}}rpx;" bindtap="playAudio" data-index="{{index}}" data-src="{{serverAddress}}{{item.address}}" data-name="{{item.courseName}}"/>
.sliderBox {
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin: 20rpx 0 0 0;
}
.slider_middle {
  width: calc(100% - 80rpx);
  margin: 0;
}
.right_text {
  color: #F19831;
  font-size: 24rpx;
}
 data: {
    meditationCourse: null,   //数据
    currentIndex: null,   //要展示的音频进度条的下标
    audio: null,   //音频
  },

//获取到数据,处理后 赋值
getData(){
     res.data.data.hcCourseResultList.forEach(item => {
         item.isMove = false   //是否触发滚动条的移动
         item.showAudio = false   //是否播放
         item.currentProcessNum = 0   //当前播放的进程
         item.showTotalTime = this._getMinuteBySecond(item.duration)   //显示的总时长
    })
       
    this.setData({
         meditationCourse: res.data.data
    })
},
 // 秒转分
  _getMinuteBySecond(seconds) {
    let minute = Math.floor(seconds / 60);
    let second = seconds % 60
    minute < 10 ? minute = '0' + minute : '';
    second < 10 ? second = '0' + second : '';
    return minute + ":" + second
  },


// 点击播放和暂停音频
  playAudio(e) {
    let that = this;
    let index = e.currentTarget.dataset.index
    let arr = that.data.meditationCourse.hcCourseResultList
    let srcAddress = e.currentTarget.dataset.src
    // 暂停当前音频
    if(arr[index].showAudio) {
      that._setAudioType(index, false)
      that.data.audio.pause()
      return
    }
    if(that.data.currentIndex == index && !arr[index].showAudio) {
      that._setAudioType(index, true)
      that.data.audio.play()
      return
    }

    if (that.data.audio) {   //将播放的音频停止
      that.data.audio.pause()
    }
    arr.forEach((item, index) => {   //将所有的音频置为停止状态
      that._setAudioType(index, false)
    })
    that._setAudioType(index,true)   //将当前音频置为播放状态
    that.setData({
      currentIndex: index   //设置当前要展示的音频进度条
    })
    
    that.data.audio = wx.getBackgroundAudioManager();//初始化音频并播放
    that.data.audio.src = srcAddress
    that.data.audio.title = e.currentTarget.dataset.name   //音频标题  必填
    that.data.audio.autoplay = true
    that.data.audio.play();

    //音频开始播放的时间 和 进度条的当前值为0 
    that.data.audio.startTime = 0
    let currentProcessNum = `meditationCourse.hcCourseResultList[${index}].currentProcessNum`
    that.setData({
      [currentProcessNum]: 0
    })
  
    //音频自然播放结束
    that.data.audio.onEnded(function name(params) {
      console.log('音频自然播放结束')
    })

    //音频进度播放更新
    that.data.audio.onTimeUpdate(function () {
      //没有触动滑动事件 更新进度
      if(!arr[index].isMove){
        that._setCurrent(index)
      }
   })
  },
  //开始滑动触发
  start : function (e) {
    let index = e.currentTarget.dataset.index
    this.move(index,true)
    this.data.audio.pause()
  },
  //触发滑动条
  changeSlide : function (e) {
    let that = this
    let index = e.currentTarget.dataset.index
    const position = e.detail.value
    
    let currentProcessNum = `meditationCourse.hcCourseResultList[${index}].currentProcessNum`
    that.setData({
     [currentProcessNum]: position
    })

    that.data.audio.seek = position
    wx.seekBackgroundAudio({
      position: Math.floor(position),
    })
  },

  //结束滑动触发
  end : function (e) {
    let index = e.currentTarget.dataset.index
    this.move(index, false)
    this.data.audio.play()
    if(!this.data.meditationCourse.hcCourseResultList[index].showAudio) {
      this._setAudioType(index, true)
    }
  },
  //设置音频图片状态以及滚动条可播放状态函数
  _setAudioType: function (index, tag) {
      let that = this
      let showAudio = `meditationCourse.hcCourseResultList[${index}].showAudio`
      that.setData({
        [showAudio]: tag
      })
  },
  //设置 滚动条当前位置函数
 _setCurrent: function (index) {
   let currentProcessNum = `meditationCourse.hcCourseResultList[${index}].currentProcessNum`
   this.setData({
     [currentProcessNum]: this.data.audio.currentTime
   })
 },
 //设置滚动条是否滚动状态函数
 move:function (index,isMove) {
   let isMoveValue = `meditationCourse.hcCourseResultList[${index}].isMove`
    this.setData({
      [isMoveValue]: isMove
    })
 },

实现效果:

原生微信小程序,多音频播放实现进度条功能

 文章来源地址https://www.toymoban.com/news/detail-509335.html

到了这里,关于原生微信小程序,多音频播放实现进度条功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 原生微信小程序实现手写签名功能

    项目中有遇到在小程序上实现手动签名功能,今天给大家分享下代码 wxml 文件代码如下,catchtouchmove属性一定要加上,否则移动起来连笔非常不流畅 wxss代码 js代码 效果如下

    2024年02月16日
    浏览(34)
  • 微信小程序播放器的一些简单功能实现

    一、构建npm(后面用到moment的格式化时间) 二、系统后台监测程序播放器配置(系统后台要知道该播放器是否在播放歌曲,并有一些简单的业务逻辑) 在app.json中添加以下代码----和tarbar同级 三、由于后面用到后台需要监测是哪首歌,需要有id和播放状态 在app.js中添加如下代

    2024年01月23日
    浏览(51)
  • 微信小程序实现一个音乐播放器的功能

    1.页面包含一个音乐列表,点击列表中的音乐可以播放对应的音乐。 2.播放中的音乐在列表中有标识,并且可以暂停或继续播放。 3.显示当前音乐的播放进度和总时长,并可以拖动进度条调整播放进度。 4.点击切换按钮可以切换到下一首音乐。 5.点击循环按钮可以切换音乐的

    2024年01月22日
    浏览(38)
  • 微信小程序 ---播放音频

    功能描述:一进页面就会播放音乐,点击暂停再次点击后可以开始播放,退出页面后播放停止。 HTML:

    2024年02月11日
    浏览(38)
  • 微信小程序中音频播放

    如何在小程序中实现音频播放 需要注意几点 由于现在官方不再维护 audio 组件 ,所以音频播放尽可能采取 wx.createInnerAudioContext() 接口 ( 若需要在后台播放,则采用 wx.getBackgroundAudioManager() ) 音频播放,只有在播放时才可以获取到音频长度(参考了多个带音频的小程序 qq音乐

    2024年02月08日
    浏览(43)
  • 微信小程序原生开发功能合集十五:个人主页功能实现

      本章个人主页功能实现,展示当前登录用户信息、个人主页、修改密码、浏览记录、我的收藏、常见问题、意见反馈、关于我们等界面及对应功能实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实

    2024年02月06日
    浏览(75)
  • 微信小程序原生开发功能合集十六:系统主页实现

      本章实现小程序主页开发及对应逻辑处理,实现问卷填报相关功能,实现问卷查看、问卷查看、填报历史等功能的实现。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:   

    2024年02月10日
    浏览(32)
  • 微信小程序原生开发功能合集十二:编辑界面的实现

      本章实现编辑界面的实现处理,包括各编辑组件的使用及添加数据保存数据流程的实现处理。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: https://edu.csdn.ne

    2024年02月02日
    浏览(38)
  • uniapp—— 微信小程序ios上音频播放没有声音

    uniapp 打包小程序后发现 播放音频文件  没有报错, 一切正常只是没有声音,后来发现是ios手机开启了静音模式导致听不到声音,查看uniapp 文档:  发现的确有这个属性,但是设置了 之后发现并没有起作用 后来发现想要实现ios静音模式下也可以播放音频要用另一个api全局配

    2024年02月13日
    浏览(113)
  • 微信小程序音频播放问题createInnerAudioContext为何不调用onTimeUpdate

    废话不多说,直接这么写就可以解决:     innerAudioContext.play();          innerAudioContext.onCanplay(() = {       innerAudioContext.play();         console.log(\\\'开始播放\\\')     });     innerAudioContext.onWaiting(() = {         innerAudioContext.pause()     }); 主要涉及这几个方法

    2024年02月15日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包