音乐播放器

第一页

<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>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值