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


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 相关文章推荐
js最简单的拖拽效果实现代码
Sep 24 Javascript
jquery实现的一个简单进度条效果实例
May 12 Javascript
轻量级javascript 框架Backbone使用指南
Jul 24 Javascript
jQuery学习笔记之入门
Dec 14 Javascript
jQuery插件ajaxFileUpload使用详解
Jan 10 Javascript
jquery 仿锚点跳转到页面指定位置的实例
Feb 14 Javascript
网页中的图片查看器viewjs使用方法
Jul 11 Javascript
详解如何去除vue项目中的#——History模式
Oct 13 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
Dec 01 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
Oct 22 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
Sep 21 Javascript
Vue看了就会的8个小技巧
Jan 21 Vue.js
微信小程序实现音乐播放器
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
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
jquery JSON的解析方式
2009/07/25 Javascript
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
python负载均衡的简单实现方法
2018/02/04 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
女大学生自我鉴定
2013/12/09 职场文书
消防器材管理制度
2014/01/28 职场文书
集中整治工作方案
2014/05/01 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
2015年质检工作总结
2015/05/04 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书