1.7 背景音乐播放
2018-12-11 本文已影响15人
追梦小乐
1、显示音乐播放图标
1.1 新增音乐播放图片
post-detail.wxml
![](https://img.haomeiwen.com/i2108792/1a26162b2d8b0087.png)
1.2 添加音乐播放的CSS代码
post-detail.wxss
.music{
width: 110rpx;
height: 110rpx;
position: absolute;
left: 50%;
margin-left: -51rpx;
top: 180rpx;
opacity: 0.9;
}
1.3 新增isPlayingMusic控制变量
post-detail.js
![](https://img.haomeiwen.com/i2108792/4f0975141179ae14.png)
![](https://img.haomeiwen.com/i2108792/56591764a7c099a7.png)
2、切换音乐播放图标
post-detail.js
![](https://img.haomeiwen.com/i2108792/ba0bda6bf0720ea9.png)
![](https://img.haomeiwen.com/i2108792/21feb052cb336706.png)
3、背景音乐播放的特点
- 1)音乐播放不受页面关闭的影响,即使一个页面被unload掉,音乐依然会继续播放
- 2) 同时只能有一个后台音乐在播放,如果播放另外一首音乐,那么当前音乐将停止
- 3)如果用户不主动关闭音乐,那么只有在退出小程序后音乐播放才会停止,关闭当前页面是不会影响小程序音乐播放的
- 4)除了调用MINA框架的API来控制音乐播放,小程序在模拟器中还提供了一个总控开关来控制音乐的播放
4、实现单页面背景音乐播放
post-detail.js
onMusicTap:function(event){
if (this.data.isPlayingMusic){
wx.pauseBackgroundAudio();
this.setData({
isPlayingMusic:false
})
}else{
wx.playBackgroundAudio({
dataUrl: this.postData.music.url,
title:this.postData.music.title,
coverImgUrl:this.postData.music.coverImg
})
this.setData({
isPlayingMusic: true
})
}
![](https://img.haomeiwen.com/i2108792/f740f9136213a71c.png)
5、监听音乐播放
上面的代码有一个小BUG,就是播放完一首歌之后,音乐图标应该恢复成未播放状态,但是 实际情况如下图所示,图标状态还是处于正在播放状态
![](https://img.haomeiwen.com/i2108792/d95b9cf0c0e40301.png)
官方API提供了以下3个方法来监听音乐播放的各种状态:
![](https://img.haomeiwen.com/i2108792/a044a6aa792c5db5.png)
解决BUG的代码如下:
post-detail.js
![](https://img.haomeiwen.com/i2108792/8af6e384a0ebbb26.png)
![](https://img.haomeiwen.com/i2108792/33cffd737046e751.png)
然后就可以看到播放完音乐之后,图标也恢复了未播放的状态
![](https://img.haomeiwen.com/i2108792/2e1358edcaf5f711.png)
6、全局变量与全局音乐播放
6.1 添加全局变量
app.js
![](https://img.haomeiwen.com/i2108792/0fbd38b4ed19c9a5.png)
6.2 获取小程序App对象
post-detail.js
![](https://img.haomeiwen.com/i2108792/df9d2771f9fae7ba.png)
![](https://img.haomeiwen.com/i2108792/152ecd2bdcc6e7c2.png)
6.3 修改onMusicTap方法
post-detail.js
![](https://img.haomeiwen.com/i2108792/8d4d75d0f5212dad.png)
6.4 修改setMusicMonitor方法
post-detail.js
![](https://img.haomeiwen.com/i2108792/e52fb62b6d2c78fc.png)
6.5 初始化音乐播放图标的状态
post-detail.js
![](https://img.haomeiwen.com/i2108792/3a32b65266f9ae58.png)
6.6 调用initMusicStatus
post-detail.js
![](https://img.haomeiwen.com/i2108792/df1046235fb8c7c1.png)
可以看到,在A文章播放音乐,退出A页面后再进入A页面,音乐播放图标仍然是正在播放的状态
![](https://img.haomeiwen.com/i2108792/855a352d3a7952a7.png)
![](https://img.haomeiwen.com/i2108792/e316de7a38e6e896.png)
不过有个问题是:点击其它文章,例如B文章,还是播放了A文章的音乐
6.7 新增全局变量保存正在播放音乐的id号
app.js
![](https://img.haomeiwen.com/i2108792/8713d76bbe4a6d4a.png)
6.8 保存音乐的id号
post-detail.js
![](https://img.haomeiwen.com/i2108792/d3cbe1a14f9b4951.png)
6.9 修改initMusicStatus方法
post-detail.js
![](https://img.haomeiwen.com/i2108792/6cfaef1f9af71b83.png)
效果如下(都是播放各个列表的音乐):
![](https://img.haomeiwen.com/i2108792/0acc4b462ac53d19.png)
![](https://img.haomeiwen.com/i2108792/42e198d50741834d.png)
7、音乐总控开关
细心可以发现,模拟器上面的音乐播放器开发不能影响图标的变化
7.1 添加总控开关事件监听函数
post-detail.js
wx.onBackgroundAudioPlay(function(event){
//只处理当前页面的音乐播放
if (app.globalData.g_currentMusicPostId == that.postData.postId){
that.setData({
isPlayingMusic: true
})
}
app.globalData.g_isPlayingMusic = true;
});
wx.onBackgroundAudioPause(function(){
//只处理当前页面的音乐暂停
if (app.globalData.g_currentMusicPostId == that.postData.postId) {
that.setData({
isPlayingMusic: false
})
}
app.globalData.g_isPlayingMusic = false;
})
![](https://img.haomeiwen.com/i2108792/aa1e6fa23dbfbfcd.png)
效果如下:
![](https://img.haomeiwen.com/i2108792/06f5f973a8f22a28.png)
![](https://img.haomeiwen.com/i2108792/e3aa674a84c142d3.png)
8、显示音乐的封面图片
8.1 显示音乐封面图
post-detail.js
![](https://img.haomeiwen.com/i2108792/5d20dacb5b63f070.png)
效果如下:
![](https://img.haomeiwen.com/i2108792/4bdcb596bdbf6493.png)
![](https://img.haomeiwen.com/i2108792/b0fc267652cf574d.png)