微信小程序音乐播放器开发


Posted in Javascript onNovember 20, 2019

前言 

这篇文章上一版本是用audio组件开发的播放器,随后反应音频加载速度慢的问题

微信小程序音乐播放器开发

又用小程序内置的背景音乐播放的方法写了一遍,逻辑是一样的逻辑,希望对大家有所帮助!

<view class='audiosBox'>
  <view class="audioOpen" bindtap="listenerButtonPlay" wx:if="{{!isOpen}}">
   <image class='image2' src="../../images/play.png" />
  </view>
  <view class="audioOpen" bindtap="listenerButtonPause" wx:if="{{isOpen}}">
   <image src="../../images/pauses.png" />
  </view>
  <view class='slid'>
   <slider bindchange="sliderChange" block-size="12px" step="2" value="{{offset}}" max="{{max}}" selected-color="#4c9dee" />
   <view>
    <text class='times'>{{starttime}}</text> <!-- 进度时长 -->
    
    <text class='times'>{{duration}}</text>  <!-- 总时长 -->
   </view>
  </view>
</view>

js部分注意了:bug ios 播放时必须加title 不然会报错导致音乐不播放

//index.js
//获取应用实例
const bgMusic = wx.getBackgroundAudioManager()
const app = getApp()
 
Page({
 data: {
  isOpen: false,//播放开关
  starttime: '00:00', //正在播放时长
  duration: '06:41',  //总时长
  src:"http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46"
 },
 // 播放
 listenerButtonPlay: function () {
  var that = this
  //bug ios 播放时必须加title 不然会报错导致音乐不播放
  bgMusic.title = '此时此刻' 
  bgMusic.epname = '此时此刻'
  bgMusic.src = that.data.src;
  bgMusic.onTimeUpdate(() => { 
   //bgMusic.duration总时长 bgMusic.currentTime当前进度
   console.log(bgMusic.currentTime)
   var duration = bgMusic.duration; 
   var offset = bgMusic.currentTime; 
   var currentTime = parseInt(bgMusic.currentTime);
   var min = "0" + parseInt(currentTime / 60);
   var max = parseInt(bgMusic.duration);
   var sec = currentTime % 60;
   if (sec < 10) {
    sec = "0" + sec;
   };
   var starttime = min + ':' + sec;  /* 00:00 */
   that.setData({
    offset: currentTime,
    starttime: starttime,
    max: max,
    changePlay: true
   })
  })
  //播放结束
  bgMusic.onEnded(() => {
   that.setData({
    starttime: '00:00',
    isOpen: false,
    offset: 0
   })
   console.log("音乐播放结束");
  })
  bgMusic.play();
  that.setData({
   isOpen: true,
  })
 },
 //暂停播放
 listenerButtonPause(){
   var that = this
  bgMusic.pause()
  that.setData({
   isOpen: false,
  })
 },
 listenerButtonStop(){
  var that = this
  bgMusic.stop()
 },
 // 进度条拖拽
 sliderChange(e) {
  var that = this
  var offset = parseInt(e.detail.value);
  bgMusic.play();
  bgMusic.seek(offset);
  that.setData({
   isOpen: true,
  })
 },
 // 页面卸载时停止播放
 onUnload() {
  var that = this
  that.listenerButtonStop()//停止播放
  console.log("离开")
 },
})

css部分 

/**index.wxss**/
.audiosBox{
 width: 92%;
 margin: auto;
 height: 130rpx;
 display: flex;
 justify-content: space-between;
 align-items: center;
 background: #f6f7f7;
 border-radius: 10rpx;
}
/*按钮大小 */
.audioOpen{
 width: 70rpx;
 height: 70rpx;
 border: 2rpx solid #4c9dee;
 border-radius: 50%;
 display: flex;
 align-items: center;
 justify-content: center;
 margin-left: 20rpx;
}
 
image{
 width: 30rpx;
 height: 40rpx;
}
.image2{
 margin-left: 10%;
}
/*进度条长度 */
.slid{
 flex: 1;
 position: relative;
}
.slid view{
 display: flex;
 justify-content: space-between;
}
.slid view>text:nth-child(1){
 color: #4c9dee;
 margin-left:6rpx; 
}
.slid view>text:nth-child(2){
 margin-right:6rpx; 
}
slider{
 width: 520rpx;
 margin: 0;
 margin-left: 35rpx;
}
/*横向布局 */
.times{
 width: 100rpx;
 text-align: center;
 display: inline-block;
 font-size: 24rpx;
 color:#999999;
 margin-top: 5rpx;
}
.title view{
 text-indent: 2em;
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
理解JavaScript中的事件
Sep 23 Javascript
firefox中JS读取XML文件
Dec 21 Javascript
JavaScript 用cloneNode方法克隆节点的代码
Oct 15 Javascript
JS取得绝对路径的实现代码
Jan 16 Javascript
微信小程序 request接口的封装实例代码
Apr 26 Javascript
Web制作验证码功能实例代码
Jun 19 Javascript
vue.js中父组件调用子组件的内部方法示例
Oct 22 Javascript
Vue press 支持图片放大功能的实例代码
Nov 09 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
May 14 Javascript
JS使用H5实现图片预览功能
Sep 30 Javascript
vue设置一开始进入的页面教程
Oct 28 Javascript
javascript实现fetch请求返回的统一拦截
Dec 22 Javascript
微信小程序实现音乐播放器
Nov 20 #Javascript
vue移动端模态框(可传参)的实现
Nov 20 #Javascript
微信小程序实现上拉加载功能
Nov 20 #Javascript
微信小程序实现锚点功能
Nov 20 #Javascript
vue实现element表格里表头信息提示功能(推荐)
Nov 20 #Javascript
微信小程序实现时间进度条功能
Nov 17 #Javascript
小程序实现投票进度条
Nov 20 #Javascript
You might like
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
jQuery 获取对象 定位子对象
2010/05/31 Javascript
理解JSON:3分钟课程
2011/10/28 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
python监控文件并且发送告警邮件
2018/06/21 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
给医务人员表扬信
2014/01/12 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
校车司机安全责任书
2015/05/11 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
实验室安全管理制度
2015/08/05 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL