第一页
<view class="tab">
<view class="tab-item {{item==0?'active':''}}" bindtap="changeItem" data-item="0">音乐推荐</view>
<view class="tab-item {{item==1?'active':''}}" bindtap="changeItem" data-item="1">播放器</view>
<view class="tab-item {{item==2?'active':''}}" bindtap="changeItem" data-item="2">播放列表</view>
</view>
<view class="content" style="color: #ffff;">
<swiper>
<swiper-item>
<include src="./info"></include>
</swiper-item>
<swiper-item>
<include src="./play"></include>
</swiper-item>
<swiper-item>
<include src="./playlist"></include>
</swiper-item>
</swiper>
</view>
<view class="player">
<image src="../images/cover.jpg"></image>
<view clas="player-info">
<view >钢琴协调曲</view>
<view class="player-info-auth">肖邦</view>
</view>
<view class="player-controls">
<image src="../images/01.png" bindtap="changeList"></image>
<image wx:if="{{ state=='paused' }}"src="../images/02.png"></image>
<image wx:if="{{state=='running'}}"src="../images/03.png"></image>
<image src="../images/03.png"></image>
</view>
</view>
javascript函数内容
Page({
/**
* 页面的初始数据
*/
data: {
playIndex: true,
item:0,
state:'paused',
playlist:[{
id:1,
title:'钢琴协调曲1',
singer:'肖邦1',
coverImage:'../images/cover.jpg',
src:'https://www.ytmp3.cn/down/78485.mp3'
},{
id:2,
title:'钢琴协调曲2',
singer:'肖邦2',
coverImage:'../images/cover.jpg',
src:'https://www.ytmp3.cn/down/78485.mp3'
},{
id:3,
title:'钢琴协调曲3',
singer:'肖邦3',
coverImage:'../images/cover.jpg',
src:'https://www.ytmp3.cn/down/78485.mp3'
},{
id:4,
title:'钢琴协调曲4',
singer:'肖邦4',
coverImage:'../images/cover.jpg',
src:'http://www.ytmp3.cn/down/78484.mp3'
}
],
play:{
id:0,
title:'test',
singer:'stest',
coverImage:'../images/cover.jpg',
src:''
}
},
changeItem:function(e){
console.log(e)
this.setData({
playIndex:e.currentTarget.dataset.index,
})
//缺少切换歌曲的逻辑,后面补充
this.setMusic(e.currentTarget.dataset.index)
},
change:function(e){
console.log(e)
this.setData({
playIndex:e.currentTarget.dataset.index,
})
this.setMusic(e.currentTarget.dataset.index)
if(this.data.state=='running'){
this.play()
}
},
changeItem:function(e){
//console.log(e)
this.setData({
item:e.detail.current
})
},
play:function(e){
//播放音乐,放到后面实现
this.audioCtx.play()
//改变状态
this.setData({
state:'runing'
});
},
pause:function(e){
//暂停播放音乐,放到后面实现
this.audioCtx.pause()
//改变状态
this.setData({
state:'paused'
});
},
changeList:function(e){
this.setData({
item:2
})
},
next:function(e){
var index = this.data.playIndex+1;
var count = this.data.playlist.length;
index = index%count;
this.setMusic(index)
if(this.data.state == 'running'){
this.play()
}
},
testbindchange:function(e){
},
testbindchanging:function(e){
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
*
*/
audioCtx :null,
onReady() {
this.audioCtx =wx.createInnerAudioContext()
//默认播放第0首歌曲
this.setMusic(0)
},
//播放第index首歌曲
模块框架
setMusic:function(index){
var currentMusic = this.data.playlist[index]
this.audioCtx.src = currentMusic.src
//保存当前播放音乐的信息
this.setData({
'play.title':currentMusic.title,
'play.singer':currentMusic.singer,
'play.coverImage':currentMusic.coverImage,
'play.src':currentMusic.src,
'play.id':currentMusic.id
})
},
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})
page{
background-color: #1a1818;
height: 100%;
display: flex;
flex-direction: column;
}
.tab{
display: flex;
flex-direction: row;
}
.tab-item{
flex: 1;
text-align: center;
color: #ffffff;
font-size: 10pt;
line-height: 72rpx;
border-bottom: 6rpx solid #ffffff;
}
.tab-item.active{
color: #ff1e1e;
border-bottom: 6rpx solid #ff1e1e;
}
.content{
height: 100%;
}
.content>swiper{
height: 100%;
}
.content-info-portal{
display: flex;
margin-bottom: 15px;
}
.content-info-portal image{
width: 120rpx;
height:120rpx;
display: block;
margin: 20rpx auto;
}
.content-info-portal>view{
flex: 1;
font-size: 11pt;
text-align: center;
}
.content-info-list>text{
margin-left: 10rpx;
}
.list-inner{
display: flex;
flex-direction: row;
}
.list-item{
flex: 1;
text-align: center;
}
.list-item>image{
width: 200rpx;
height: 200rpx;
display: block;
margin: 0 auto;
border-radius: 10rpx;
}
.content-info-list {
font-size: 11pt;
margin-bottom: 20rpx;
}
.content-info-list>list-title{
margin: 20rpx 35rpx;
}
.content-info-list>.list-inner{
display: flex;
flex-wrap: wrap;
margin: 15rpx;
}
.content-info-list>.list-inner>.list-item{
flex: 1;
}
.content-info-list>.list-inner>.list-item>image{
display: block;
width: 200rpx;
height: 200rpx;
margin: 0 auto;
border-radius: 10rpx;
border: 1rpx solid #555;
}
.content-info-list>.list-inner>.list-item>view{
width: 200rpx;
margin: 10rpx auto;
font-size: 10pt;
}
/*播放控制器的样式*/
.player{
display: flex;
flex-direction: row;
height: 112rpx;
background: rgb(14,13,13);
color: #ffffff;
border-top: 1px solid #726b6b;
}
.player>image{
width: 80rpx;
height: 80rpx;
border-radius: 10rpx;
border: 1px solid #a89999;
margin-left: 20rpx;
margin-top: 10rpx;
}
.player-info{
margin-top: 10rpx;
flex: 1;
font-size: 8pt;
margin-left: 20rpx;
}
.player-info-auth{
color: rgb(185,172,163);
}
.player-controls{
margin: 0 auto;
}
.player-controls>image{
width: 80rpx;
height: 80rpx;
margin-right: 20rpx;
}
.content-play{
display: flex;
flex-direction: column;
height: 100%;
justify-content: space-around;
text-align: center;
}
.content-play-cover{
height: 550px;
text-align: center;
}
.content-play-info > view{
color:#b9b4b4;
font-size: 11pt;
}
.content-play-cover>image{
height: 400rpx;
width: 400rpx;
border-radius: 50%;
border: 1px solid #726b6b;
animation-name: rotateImage;
animation-duration:10s;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
.content-play-progress{
color:#ffffff;
font-size: 9pt;
display: flex;
margin:0 35rpx;
align-items: center;
}
.content-play-progress slider{
flex:1;
}
@keyframes rotateImage{
from{
transform: rotate(0deg);
}
to{
transform: rotate(360deg);
}
}
.playlist-list{
display: flex;
flex-direction: column;
border-bottom:1px solid #d1caca;
}
.playlist-item{
display: flex;
flex-direction: row;
height: 112rpx;
align-items: center;
}
.playlist-item>image{
width: 80rpx;
height: 80rpx;
border-radius: 8rpx;
border: 1px solid #726b6b;
margin-left: 15rpx;
}
.playlist-info{
flex: 1;
display: flex;
flex-direction: column;
font-size: 10pt;
margin-left: 20rpx;
}
.playlist-info-author{
color: #a89999;
}
playlist-info-contro{
font-size: 10pt;
color: #ff1e1e;
margin-right: 20rpx;
}
第二页
<view class="content-play">
<!--显示音乐信息-->
<view class="content-play-info">
<text>钢琴协调曲</text>
<view>---肖邦---</view>
</view>
<!--显示唱片的图片-->
<view class="content-play-cover">
<image src="../images/cover.jpg" style="animation-play-state:{{state}};"></image>
</view>
<!--显示播放的进度的区域-->
<view class="content-play-progress">
<text>00:00</text>
<slider value="40" activeColor="#909090" backgroundColor="#ffffff" block-size="12" block-color="#efefef" bindchange="testbindchange" bindchanging="testbindchangeing"></slider>
<text>00:00</text>
</view>
</view>
第三页
<label wx:for="{{playlist}}">
<view class="playlist-list">
<view class="playlist-item" bindtap="change" id="{{item.id}}" data-index="{{index}}">
<image src="{{item.coverImage}}"></image>
<view class="playlist-info">
<text>{{item.singer}}</text>
<text class="playlist-info-author">{{item.singer}}</text>
</view>
<view wx:if="{{index==playIndex}}" class="playlist-info-control">正在播放</view>
</view>
</view>
</label>