首页 > 小程序教程 > 微信小程序推荐音乐正在播放页面样式模板制作设计下载

微信小程序推荐音乐正在播放页面样式模板制作设计下载

上一篇 下一篇
制作好以后效果图如下:
     
一、wxml页面代码如下:
<!--index.wxml-->
<import src="../../../utils/playpercent.wxml" />
<import src="../../../utils/lrc.wxml" />

<view class="swiper-tab">
    <view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">歌单</view>
    <view class="swiper-tab-list {{currentTab==1 ? 'on' : ''}}" data-current="1" bindtap="swichNav">正在播放</view>
</view>

<swiper current="{{currentTab}}" class="swiper-box" duration="300" style="height:{{winHeight-31}}px" bindchange="bindChange">
    <swiper-item>
      <scroll-view scroll-y="true" scroll-x="false" style="height:{{winHeight}}px;">
        <view wx:for="{{playlists}}" wx:key="playlist" class="playlist z-depth-2" bindtap="tracks" id="{{index}}">
          <view>
            <image src="{{item.cover}}" class="cover" mode="aspectFill"/>
          </view>
          <view class="hover">
            <text></text>
          </view>
          <view class="title">
            <text>{{item.title}}</text>
          </view>
        </view>
      </scroll-view>
    </swiper-item>
    <swiper-item>
      <view id="playingpage" class=" {{playing?'playing':''}}">
        <view class="blurbg" style="background-image: url({{coverImgUrl}})"></view>
        <view class="playing-wrap">
          <view class="contents">
            <view hidden="{{showlrc}}" style="height:200px; width:200px;" id="playing-main">
              <image src="{{coverImgUrl}}" bindtap="loadlrc" id="pmaincover" />
            </view>
            <view class="nowPlayingTitle" hidden="{{showlrc}}">
              <text>{{nowPlayingTitle}}</text>
            </view>
            <view class="nowPlayingArtist" hidden="{{showlrc}}" >
              <text>{{nowPlayingArtist}}</text>
            </view>
          </view>
          <template is="lrc" data="{{lrc:lrc,showlrc:showlrc,lrcindex:lrcindex}}" />
          <view class="actions">
            <view id="playing-actwrap">
              <template is="playingpercent" data="{{playtime:playtime,percent:percent,duration:duration,downloadPercent:downloadPercent}}" />
              <view id="playingaction">
                <view class="pa-saction" bindtap="playshuffle" hidden="{{shuffle!=1}}">
                  <image src="../../../imgs/a_p.png" />
                </view>
                <view class="pa-saction" bindtap="playshuffle" hidden="{{shuffle!=2}}">
                  <image src="../../../imgs/a_y.png" />
                </view>
                <view class="pa-saction" bindtap="playshuffle" hidden="{{shuffle!=3}}">
                  <image src="../../../imgs/aa9.png" />
                </view>
                <view class="pa-maction" data-other="-1" bindtap="playprev">
                  <image src="../../../imgs/ajh.png" />
                </view>
                <view class="pa-baction" hidden="{{!playing}}" bindtap="playingtoggle" data-p="{{playing}}">
                  <image id='pa-playing' src="../../../imgs/ajd.png" />
                </view>
                <view class="pa-baction" hidden="{{playing}}" bindtap="playingtoggle" data-p="{{playing}}">
                  <image id='pa-pause' src="../../../imgs/ajf.png" />
                </view>
                <view class="pa-maction" data-other="1" bindtap="playnext">
                  <image src="../../../imgs/ajb.png" />
                </view>
                <view class="pa-saction" bindtap="musicinfo">
                  <image src="../../../imgs/aab.png" />
                </view>
              </view>
            </view>
          </view>
        </view>
        <scroll-view scroll-y="true" style="height:{{winHeight - 110}}px" class="music_list" animation="{{animationData}}">
          <block wx:for="{{tracks}}" wx:key="tracks">
            <view class="item_music" bindtap="itemClick" id="{{index}}">
              <view class="list_music_info">
                <view class="list_ava">
                    <image class="list_avaimg" src="{{item.cover}}" />
                </view>
                <view class="list_music_info">

                  <text class="list_title" wx:if="{{index==curIndex}}" style="color: #da7c0c" >{{item.name}}</text>
                  <text wx:else class="list_title" style="color:#000">{{item.name}}</text>

                  <text class="list_author" wx:if="{{index==curIndex}}" style="color: #da7c0c" >{{item.artist}}</text>
                  <text wx:else class="list_author" style="color:#000">{{item.artist}}</text>
                </view>
              </view>

            </view>
          </block>
        </scroll-view>



        <view>




        </view>



      </view>
    </swiper-item>
</swiper>
 
二、wxss样式文件代码如下:
/**index.wxss**/
page {
  background-color: #000;
}

.swiper-tab{
	width: 100%;
	text-align: center;
	line-height: 80rpx;}
.swiper-tab-list{
    font-size: 30rpx;
    display: inline-block;
	  width: 33.33%;
	  color: #777777;
}
.on { color: #da7c0c;
	border-bottom: 5rpx solid #da7c0c;}

.swiper-box{ display: block; height: 100%; width: 100%; overflow: hidden; }
.swiper-box view{
	text-align: center;
}
/*播放列表页*/
.playlist {
    width: 100%;
    height: 230px;
    position: relative;
    text-align: center;
}

.show {
  visibility: visible;
}

.hidden {
  visibility: hidden;
}

.cover {
    width: 100%;
    position: relative;
}

.hover {
   text-align: center;
    position: absolute;
    width: 100%;
    top:0px;
    height:100%;
    line-height:30px;
    background: black;
    opacity: 0.3;
}

.title {
    text-align: center;
    position: absolute;
    width: 100%;
    top:100px;
    height:30px;
    line-height:30px;
    color: white;
}
/*播放器页*/
#playingpage {
  position: relative;
  width: 100%;
  height: 100%;
}
#playingpage .blurbg{
  position: absolute;
  left: 0;
  bottom:0;
  right: 0;
  top: 0;
  z-index: 1;
  background-size: cover;
  background-position: center;
  filter: blur(30px) brightness(.8);
  background-repeat: no-repeat;
}
#playingpage .playing-wrap {
  position: absolute;
  left: 0;
  bottom:0;
  right: 0;
  top: 0;
  z-index: 2;
  display: flex;
  flex-direction: column;
}
#playingpage .playing-wrap .contents {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
#playingpage .playing-wrap .actions {
  padding: 50px;
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
}

.nowPlayingTitle {
  margin-top: 10px;
  position:relative;
  z-index:2;

}

.nowPlayingArtist {
  margin-top: 20px;
  position:relative;
  z-index:2;
}
#playing-zz{text-align: center;position: absolute;z-index:20;width: 100%;top:0;left: 0;}
#playing-zz image{width: 222rpx;height:366rpx;margin:-60rpx 0 0 60px; transform-origin:60rpx 60rpx; transform: rotate(-20deg);
transition: all linear .5s }



#playing-main{
  animation-delay: .5s;animation: circle 20s linear infinite; animation-play-state: paused;
}
#playingmainbg{
  width:596rpx;
  height: 596rpx;
  position: relative;
  z-index: 1
}
#pmaincover{width: 100%;height: 100%;left:104rpx ;top:104rpx;
border-radius: 50%;overflow: hidden;}

#playing-actwrap{
  position: absolute;
  left: 0;
  bottom:0;
  width: 100%;
  box-sizing:border-box;
  overflow: hidden;
  z-index: 10;
}
#playing-info{display: flex;margin:0 80rpx}
.pi-act{flex: 1;text-align: center;width: 100%;position: relative}
.pi-act image{width:120rpx;height: 120rpx;}


#playingaction{margin: 10rpx 10rpx 30rpx;display: flex}
.pa-baction,.pa-maction,.pa-saction{flex: 1;text-align: center;width: 100%}
.pa-baction image{width:110rpx;height:110rpx; vertical-align: middle }
.pa-maction image{width:80rpx;height:80rpx;vertical-align: middle;margin-top: 15rpx}
.pa-saction image{width:120rpx;height:120rpx; vertical-align: middle;}


.playing #playing-main{animation-play-state: running !important;}
.playing #playing-zz image{transform: rotate(-0deg) }

/*弹出播放列表*/
.music_list{
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  z-index: 4;
}

.item_music{
  background-color: white;
  padding: 0.2rem;
  display: flex;
  justify-content: center;
}

.list_ava{
    float: left;
    height: 2.8rem;
    margin-right: 10px;
}
.list_avaimg{
    margin-left: 0.1rem;
    margin-top: 0.1rem;
    width: 2.8rem;
    height: 2.8rem;
}
.list_music_info{
  flex: 1;
  flex-direction: column;
  justify-content: center;
  padding-left: 10px;
}
.list_title{
  display: block;
  font-size: 14px;
  color: #000;
  margin-top: 5px;
  text-align: left;
}
.list_author{
  margin-top: 5px;
  display: block;
  font-size: 12px;
  color: #666;
  text-align: left;
}
.list_control{
    width: 2.2rem;
    height: 2.2rem;
    padding: 0.4rem;
}
三、js页面代码如下:
let bsurl = 'https://poche.fm/api/app/playlists?id=1.0.1&v=mina'

var common = require('../../../utils/util.js');

let seek = 0
let defaultdata = {
  winWidth: 0,
  winHeight: 0,
  listHeight: 0,
  // tab切换
  currentTab: 0,
  // 播放列表
  playlists: [],
  tracks: [],
  coverImgUrl: "http://lastshrek.b0.upaiyun.com/icon.jpg",
  nowPlayingTitle:"请选择歌曲",
  nowPlayingArtist: "",
  playing:false,
  playtime: '00:00',
  duration: '00:00',
  percent: 1,
  lrc: [],
  lrcindex: 0,
  showlrc: false,
  disable: false,
  downloadPercent: 0,
  curIndex: 0,
  initial: true,
  shuffle: 1,
  music: {},
  animationData: {},
  pop: false,
  scroll: false,
  currentTab: 0
}
//获取应用实例
let app = getApp()
Page({
  data: defaultdata,
  onLoad: function(options) {
    var that = this
    if (options.currentTab) {
      that.setData({
        currentTab: options.currentTab
      })
    }
    wx.request({
      url: bsurl,
      success: function (res) {
        var playlists = []
        if (res.data.length != 3) {
          var playlist = {
            id:0,
            cover:'https://s.poche.fm/nowlistening/cover.png',
            title:'破车最近在听的歌',
          }
          playlists.push(playlist)
        }
        res.data.forEach(function(playlist) {
          playlists.push(playlist)
        })
        playlists.push(res.data)
        that.setData({
          listHeight: res.data.length * 230,
          playlists: playlists,
          loadingHide:true
        })
      }
    })
    //获取系统信息
    wx.getSystemInfo( {
      success: function( res ) {
        that.setData( {
          winWidth: res.windowWidth,
          winHeight: res.windowHeight
        })
      }
    })
    // 获取上次播放数据
    let index = wx.getStorageSync('curIndex')
    let tracks = wx.getStorageSync('tracks')
    if (tracks) {
      let track = tracks[index]
      that.setData( {
        curIndex: index,
        tracks: tracks,
        coverImgUrl:track.cover,
        nowPlayingArtist: track.artist,
        nowPlayingTitle: track.name,
        music: track
      })
    }

    //监听停止,自动下一首
    wx.onBackgroundAudioStop(function(){
      that.playnext();
    })
  },
  bindChange: function(e) {
    var that = this
    that.setData( { currentTab: e.detail.current })
  },
  swichNav: function(e) {
    var that = this;
    if( this.data.currentTab === e.target.dataset.current ) {
      return false;
    } else {
      that.setData( {
        currentTab: e.target.dataset.current
      })
    }
  },
  // 跳转下一页
  tracks: function(event) {
    var index = event.currentTarget.id
    var playlist = this.data.playlists[index]
    var p = playlist.id
    var title = playlist.title
    wx.navigateTo({
        url: '../tracks/index?id=' + p + '&title=' + title
    })
  },
  // 接收点击数据
  changeData: function(tracks, index, tab) {
    var curMusic = tracks[index]
    this.setData({
      curIndex: index,
      tracks: tracks,
      coverImgUrl:curMusic.cover,
      nowPlayingArtist: curMusic.artist,
      nowPlayingTitle: curMusic.name,
      playing: true,
      music: curMusic,
      lrc: [],
      lrcindex: 0,
      currentTab: tab
    })
    app.globalData.curplay.id = curMusic.id
    //存储当前播放
    wx.setStorageSync("curIndex", index)
    wx.setStorageSync("tracks", tracks)
    app.seekmusic(1)
    if (this.data.showlrc) {
      common.loadlrc(this)
    }
  },
  //播放方法
  playingtoggle:function() {
    var that = this
    if (this.data.initial) {
      // this.play(this.data.tracks, this.data.curIndex)
      this.setData({
        initial: false
      })
      this.changeData(this.data.tracks, this.data.curIndex)
      wx.showToast({
        title: '开始播放',
        icon: 'success',
        duration: 2000
      })
      return
    }
    if (this.data.playing) {
      that.setData({
        playing: false
      })
      app.stopmusic(1)
      wx.showToast({
        title: '暂停播放',
        icon: 'success',
        duration: 2000
      })
    } else {
      app.seekmusic(1, function () {
        wx.showToast({
          title: '继续播放',
          icon: 'success',
          duration: 2000
        })
        that.setData({
          playing: true
        })
      }, app.globalData.currentPosition)
    }
  },
  playnext: function (e) {
    if (this.data.initial) {
      this.setData({
        initial: false
      })
    }
    let shuffle = this.data.shuffle
    let count = this.data.tracks.length
    let lastIndex = parseInt(this.data.curIndex)

    if (shuffle == 3) {
      //随机播放
      lastIndex = Math.floor(Math.random() * count)
    } else if (shuffle == 1) {
      if (lastIndex == count - 1) {
        lastIndex = 0
      } else {
        lastIndex = lastIndex + 1
      }
    }
    this.changeData(this.data.tracks, lastIndex)
  },
  playprev: function (e) {
    if (this.data.initial) {
      this.setData({
        initial: false
      })
    }
    let shuffle = this.data.shuffle
    let lastIndex = parseInt(this.data.curIndex)
    let count = this.data.tracks.length
    if (shuffle == 3) {
      //随机播放
      lastIndex = Math.floor(Math.random() * count)
    } else if (shuffle == 1) {
      if (lastIndex == 0) {
        lastIndex = count - 1
      } else {
        lastIndex = lastIndex - 1
      }
    }
    this.changeData(this.data.tracks, lastIndex)
  },
  playshuffle: function() {
    if (this.data.shuffle == 1) {
      this.setData({
        shuffle: 2
      })
      return
    }
    if (this.data.shuffle == 2) {
      this.setData({
        shuffle: 3
      })
      return
    }
    if (this.data.shuffle == 3) {
      this.setData({
        shuffle: 1
      })
    }
  },
  musicinfo: function() {
    let pop = this.data.pop
    var animation = wx.createAnimation({
      duration: 100,
    })
    this.animation = animation
    this.setData({
      animationData:animation.export()
    })
    if (!pop) {
      // 创建动画
      this.animation.translate(0, -this.data.winHeight + 31).step()

    } else {
      this.animation.translate(0, this.data.winHeight - 81).step()
    }
    this.setData({
      animationData: this.animation.export(),
      pop: !pop
    })
  },
  // 点击播放列表
  itemClick: function(event) {
    var p = event.currentTarget.id
    this.changeData(this.data.tracks, p)
    this.musicinfo()
  },
  // 加载歌词
  loadlrc: function(event) {
    if (this.data.showlrc == false) {
      this.setData({
        showlrc: true
      })
      common.loadlrc(this);
    } else {
      this.setData({
        showlrc: false
      })
    }
  },
  onShow: function (options) {
    var that = this
    app.globalData.playtype = 1;
    common.playAlrc(that, app);
    seek = setInterval(function () {
      common.playAlrc(that, app);
    }, 1000)
  },
  onUnload: function () {
    clearInterval(seek)
  },
  onHide: function () {
    clearInterval(seek)
  },
})

模板简介:该模板名称为【微信小程序推荐音乐正在播放页面样式模板制作设计下载】,大小是,文档格式为.,推荐使用打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【小程序教程】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 27,763次
  • 使用软件
  • 文件格式
  • 文件大小
  • 上传时间 06-13
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信公众平台 自适应 微信文章 微信素材 html5 微信模板 企业网站 响应式 单页式简历模板 微信图片
您可能会喜欢的其他模板