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


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中void(0)的具体含义解释
Feb 27 Javascript
JavaScript页面模板库handlebars的简单用法
Mar 02 Javascript
jquery实现从数组移除指定的值
Jun 24 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
jQueryUI Datepicker组件设置日期高亮
Oct 13 Javascript
Javascript同时声明一连串(多个)变量的方法
Jan 23 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
Mar 02 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
vue中倒计时组件的实例代码
Jul 06 Javascript
使用layer.msg 时间设置不起作用的解决方法
Sep 12 Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 29 Javascript
JS图片懒加载的优点及实现原理
Jan 10 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之第四天
2006/10/09 PHP
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php visitFile()遍历指定文件夹函数
2010/08/21 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
PHP中的use关键字概述
2014/07/23 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
vue实现分页栏效果
2019/06/28 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
python制作简单五子棋游戏
2019/06/18 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
Python中的__init__作用是什么
2020/06/09 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
Django自带的用户验证系统实现
2020/12/18 Python
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
售后求职信范文
2014/03/15 职场文书
公司活动总结怎么写
2014/06/25 职场文书
复活读书笔记
2015/06/29 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
担保书范文
2019/07/09 职场文书