1.注册音频的Api

const innerAudioContext = wx.createInnerAudioContext();

2.需要用到数据

    exhibitList: [],  //资源列表audioSrc: null, //需要播放的音频资源iconUrl:null, //需要播放的音频的图片资源audioName:null, //需要播放音频的名称isPlayAudio: false,audioSeek: 0, //音频当前时间audioDuration: 0, //音频总时间showTime1: '00:00',showTime2: '00:00',durationIntval: 0,audioTime: 0, //进度条变化的值

3.监听页面卸载

onUnload: function () {//初始化音频播放参数this.setData({showTime1: '00:00',showTime2: '00:00',durationIntval: 0,audioTime: 0, //进度条变化的值isPlayAudio: false,audioSeek: 0, //音频当前时间isPlayAudio: false,})//音频播放停止innerAudioContext.stop()//卸载页面,清除计步器clearInterval(this.data.durationIntval);},

4.加载初始化

onLoad: function (options) {//初始化音频控件this.initAudio();this.loadaudio();},

5.点击单个资源播放

exhibitClick:function(e){let index=e.currentTarget.dataset.index;// console.log(this.data.exhibitList)var that = this;//获取音频资源链接let audiourl = this.data.exhibitList[index].audioUrl;// console.log(audiourl)let iconUrl = e.currentTarget.dataset.iconurl;let audioName = this.data.exhibitList[index].name;console.log(this.data.exhibitList[index])//判断当前音频是否为免费音频let isFree = e.currentTarget.dataset.isfree;let audioVipType = e.currentTarget.dataset.viptype;if (isFree == 1){//初始化播放参数this.setData({audioSrc: audiourl,index:index,iconUrl:iconUrl,audioName: audioName,showTime1: '00:00',showTime2: '00:00',durationIntval: 0,audioTime: 0, //进度条变化的值isPlayAudio: false,audioSeek: 0, //音频当前时间isPlayAudio: false,activeIndex:index,})this.playAudio();this.setData({showView:true})}},

6.点击下一首播放,有重复的代码,可以自己封装

handleLeft:function(){let that=this;let id= parseInt(that.data.index)  ;let num= id-1;console.log(num) if(num-1<-1){wx.showToast({title: '已到第一个',})}let aUrl=that.data.exhibitList[num].audioUrllet iUrl=that.data.exhibitList[num].iconUrl;// console.log(iUrl)let aName=that.data.exhibitList[num].name;let iFre=that.data.exhibitList[num].isFree;let AvipType=that.data.exhibitList[num].vipType;// console.log(aName,iFre,iUrl)if(iFre == 1){this.setData({audioSrc: aUrl,index:num,iconUrl:iUrl,audioName: aName,showTime1: '00:00',showTime2: '00:00',durationIntval: 0,audioTime: 0, //进度条变化的值isPlayAudio: false,audioSeek: 0, //音频当前时间isPlayAudio: false,activeIndex:num,})this.playAudio();this.setData({showView:true})}},

7.设置音频的url,以及过滤时间和当前的音频总时间

initAudio: function(){var t = this;//设置srcinnerAudioContext.src = this.data.audiosrc;innerAudioContext.onCanplay(() => {//初始化durationinnerAudioContext.durationsetTimeout(function () {//延时获取音频真正的durationvar duration = innerAudioContext.duration;var min = parseInt(duration / 60);var sec = parseInt(duration % 60);if (min.toString().length == 1) {min = `0${min}`;}if (sec.toString().length == 1) {sec = `0${sec}`;}t.setData({ audioDuration: innerAudioContext.duration, showTime2: `${min}:${sec}` });}, 1000)})},

8.设置拖动进度条

sliderChange:function (e) {var that = this;innerAudioContext.src = this.data.audioSrc;//获取进度条百分比var value = e.detail.value;this.setData({ audioTime: value });var duration = this.data.audioDuration;//根据进度条百分比及歌曲总时间,计算拖动位置的时间value = parseInt(value * duration / 100);//更改状态this.setData({ audioSeek: value, isPlayAudio: true });// console.log(value)//拖动的时间//调用seek方法跳转歌曲时间innerAudioContext.seek(value);//播放歌曲innerAudioContext.play();},

9.播放暂停按钮设置

playAudio:function() {//获取播放状态和当前播放时间var isPlayAudio = this.data.isPlayAudio;// console.log(isPlayAudio)var seek = this.data.audioSeek;let animate=this.data.animateActive;innerAudioContext.pause();//更改播放状态this.setData({ isPlayAudio: !isPlayAudio ,animateActive:!animate})console.log(this.data.animateActive)if (isPlayAudio) {//如果在播放则记录播放的时间seek,暂停this.setData({ audioSeek: innerAudioContext.currentTime });// console.log(innerAudioContext.currentTime)} else {//如果在暂停,获取播放时间并继续播放innerAudioContext.src = this.data.audioSrc;if (innerAudioContext.duration != 0) {this.setData({ audioDuration: innerAudioContext.duration });}//跳转到指定时间播放innerAudioContext.seek(seek);innerAudioContext.play();}},

10.进度条与时间同步

loadaudio:function() {var that = this;//设置一个计步器this.data.durationIntval = setInterval(function () {//当歌曲在播放时执行if (that.data.isPlayAudio == true) {//获取歌曲的播放时间,进度百分比var seek = that.data.audioSeek;var duration = innerAudioContext.duration;var time = that.data.audioTime;time = parseInt(100 * seek / duration);// console.log(time) //总时间为100//当歌曲在播放时,每隔一秒歌曲播放时间+1,并计算分钟数与秒数var min = parseInt((seek + 1) / 60);var sec = parseInt((seek + 1) % 60);//填充字符串,使3:1这种呈现出 03:01 的样式if (min.toString().length == 1) {min = `0${min}`;}if (sec.toString().length == 1) {sec = `0${sec}`;}var min1 = parseInt(duration / 60);var sec1 = parseInt(duration % 60);// console.log(sec, min)if (min1.toString().length == 1) {min1 = `0${min1}`;}if (sec1.toString().length == 1) {sec1 = `0${sec1}`;}//当进度条完成,停止播放,并重设播放时间和进度条if (time >= 100) {innerAudioContext.stop();that.setData({ audioSeek: 0, audioTime: 0, audioDuration: duration, isPlayAudio: false, showTime1: `00:00` });return false;}//正常播放,更改进度信息,更改播放时间信息that.setData({ audioSeek: seek + 1, audioTime: time, audioDuration: duration, showTime1: `${min}:${sec}`, showTime2: `${min1}:${sec1}` });}}, 1000);},

微信小程序实现音频播放,带有点击上一首和下一首的功能相关推荐

  1. 微信小程序录音+音频播放(解决ios无法音频播放问题)

    微信小程序录音+播放 1.创建全局变量 const audioManager = wx.getRecorderManager(): const innerAudioContext = wx.creat ...

  2. 微信小程序html5音频,微信小程序 audio音频播放详解及实例

    loop:是否循环播放 id:标注唯一组件以this.audioCtx = wx.createAudioContext('myAudio')获取控制组件的对象. bindplay:播放时触发该事件 b ...

  3. 微信小程序全局音频播放,实现分析

    1. 需求分析 育儿柚道小程序中有针对育儿教育提供的音频课程,主要包含读书.读文的音频内容. 1.1 功能需求 课程音频:包含课程音频的地方有三处 课程卡片,包含在 scrollview 中的试听内容 ...

  4. 微信小程序:音频播放器

    由于产品需求,需要做一个自定义音频播放器,现在也差不多做完了,接下来呢,给大家分享一下,大家先来看看效果图哦~ 这里呢,我选择的是 wx.createInnerAudioContext 这个方法,大家 ...

  5. 简单实现微信小程序音乐音频播放的功能

    效果图: 1)获取歌曲详情页的数据 从每日推荐列表点击各歌曲跳转到歌曲详情页的时候,需要携带歌曲的id,在路由中把歌曲的id传到歌曲详情页的页面中使用(在wxml文件中通过data-id的形式把id传 ...

  6. 微信小程序实现音频播放

    废话不多说直接上代码,亲测可用 Page({data: {isPlay: false,},onLoad() {this.audioPlay()},//创建语音示例进行播放createAudio(e) ...

  7. 微信小程序简易音频播放器(wx.getBackgroundAudioManager())

    开发工具:微信开发者工具 源代码(百度网盘:)链接: 提取码:ldb9 注意:如果点击播放没反应,或者爆红,则需要更换js中的视频地址 第一步.首先要在app.json里设置: "requi ...

  8. android获取小程序音频时长,最新微信小程序获取音频时长与实时获取播放进度...

    #微信小程序获取音频时长与实时获取播放进度 在小程序官方文档中 audio 注意:1.6.0 版本开始,该组件不再维护.建议使用能力更强的 wx.createInnerAudioContext 接口 ...

  9. java实现音频播放小程序_微信小程序实现音频文件播放进度的实例代码

    问题描述 在微信小程序中经常会用到控制文件播放的滑块,通过滑块可控制音频播放进度,下面即用代码实现. 解决方案 首先用.wxml与 .wmss 代码实现进度条的效果,再通过 .js 文件控制进度条的进 ...

最新文章

  1. Osmocom-BB 相关资源、知识分享
  2. 一步一步学习Bootstrap系列--表单布局
  3. iOS开发常用的资源和资料
  4. HashMap HashTable ConcurrentHashMap
  5. python将数据写入Excel
  6. 直播预告 | 乘云而上:云原生数据仓库AnalyticDB
  7. php服务器怎么保活,think-queue消息队列
  8. 前端运行python代码几种方式_前端和python
  9. Ubuntu 15.04 折腾手记
  10. 微信 - 微信语音转发好友 / 朋友圈方法
  11. 最简单的在IntelliJ IDEA导入一个本地项目教程
  12. 头歌平台-人工智能之AlphaBeta剪枝算法
  13. 从零开始学Java【基本输入输出、排序(sort)、高精度大数运算(BigInteger)】
  14. 怎么用微信打开qq连接到服务器地址,微信上能打开的链接如何在qq上打?
  15. L1-011. A-B
  16. PHP+实验室安全系统 毕业设计 -附源码191610
  17. 皮卡丘为什么不进化_为什么皮卡丘不会变身?原因让人想哭
  18. Excel 用函数自定义验证数据的有效性
  19. weinre远程调试mobile页面
  20. mysql limit 01怎么理解_MySQL limit实际用法的详细解析

热门文章

  1. i5集显和独显的区别_分不清核显和独显?奸商分分钟坑哭你
  2. STM32频率与时间周期的换算公式
  3. 我的强势股操作系统和规则详解
  4. 怎样才能精通 Photoshop?
  5. 计算两个日期之间的天数
  6. matlab中暂停的快捷键,如何设置“暂停调用”和“强制调用”快捷键
  7. vue html2canvas文字重叠,vue中使用html2canvas方法,设置背景,字体重叠问题解决方法...
  8. 多目标排序在快手短视频推荐中的实践
  9. “猪”与“鸡”的寓言
  10. 【网络】配置二层链路聚合增加链路带宽并提高可靠性的示例