效果展示
音乐小程序,点击播放效果视频
系统设计
程序主页面,其中包括header content footer 三大部分
- header 是tab栏,用于切换页面
- content 有 主页面信息,音乐播放器,播放列表三部分构成
info:主页信息内容部分
play:播放器页面
playlist:播放列表
- footer 是播放器,用于点击播放,切歌,查看列表,查看播放。
目录结构如下:
系统属性
首先进行整个页面的属性设置,包括小程序名称,顶部样式等等
index.json
{ "navigationBarBackgroundColor": "#ED2E2E", "navigationBarTitleText": "网易云音乐", "navigationBarTextStyle": "white" }
代码模块
主页面采用了include代码引用,将各部分功能分到不同的wxml文件中,代码如下
主界面:index.wxml
<!-- 标签页标题 --> <include src="./header.wxml"/> <!-- 内容区域 --> <view class="content"> <swiper current="{{item}}" bindchange="changeTab"> <swiper-item> <!-- 中间信息内容部分 --> <include src="./info.wxml"/> </swiper-item> <swiper-item> <!-- 播放器页面 --> <include src="play.wxml" /> </swiper-item> <swiper-item> <include src="playlist.wxml" /> </swiper-item> </swiper> </view> <!-- 底部播放器 --> <include src="./footer.wxml"/>
头部:header
我们要做成 tab滑动切换 的效果,在这里我们就用view实现即可
header.wxml
<view class="tab"> <view class="tab-item {{tab==0?'active':''}}" bindtap="changeItem" data-item="0">音乐推荐</view> <view class="tab-item {{tab==1?'active':''}}" bindtap="changeItem" data-item="1">播放器</view> <view class="tab-item {{tab==2?'active':''}}" bindtap="changeItem" data-item="2">播放列表</view> </view>
这里的css样式类有基本的共有tab属性 还有一个判断是否选中当前tab 的属性,如果后台检测到的tab值与当前选中的一样,那么给当前选中的tab加上 active 类,active 样式就是进行切换时下面的小横线。
底部:footer
底部我们要做成一个播放器样式
当我们点击头像时会跳转到播放器页面,点击三条横线时会跳转到播放列表页面,点击播放会播放音乐并变成
点击暂停会暂停音乐并变成
点击下一首切换音乐
页面设计代码如下:footer.wxml
<view class="player"> <image class="player-cover" src="{{play.coverImgUrl}}" bindtap="dumptoplay"/> <view class="player-info"> <view class="player-info-title">{{play.title}}</view> <view class="player-info-singer">{{play.singer}}</view> </view> <view class="player-controls"> <!-- 切换到播放列表 --> <image src="/images/01.png" bindtap="changePage" data-page="2" /> <!-- 播放或暂停 --> <image wx:if="{{state=='paused'}}" src="/images/02.png" bindtap="play" /> <image wx:else src="/images/02stop.png" bindtap="pause" /> <!-- 下一曲 --> <image src="/images/03.png" bindtap="next" /> </view> </view>
头像的调转事件
dumptoplay:function(){ this.setData({ item:"1", }); }
列表与他类似,在这不写了
播放,暂停,下一首事件
// 播放按钮 play: function() { this.audioCtx.play() this.setData({ state: 'running' }) }, // 暂停按钮 pause: function() { this.audioCtx.pause() this.setData({ state: 'paused' }) }, // 下一曲按钮 next: function() { // 如果到最后了就切换到第一首 var index = this.data.playIndex >= this.data.playlist.length - 1 ? 0 : this.data.playIndex + 1 this.setMusic(index) if (this.data.state === 'running') { this.play() } },