文章目录

  • 页面跳转
  • 添加云函数路由
  • musiclist自定义组件
  • 歌曲列表页面实现

微信小程序组件化实现歌单效果

微信小程序的上拉加载与下拉刷新

微信小程序路由改造

以上三篇文章实现了歌单页面,并对云函数进行了路由改造,接下来完成歌曲列表页。

歌单效果:

页面跳转

点击歌单项,需要将歌单id传递给歌曲列表页,每个歌单项是通过自定义组件实现的,所以需要在歌单playlist组件中实现跳转和参数传递

在playlist组件的js文件中添加goToMusiclist方法,如下:

  methods: {goToMusiclist() {wx.navigateTo({url: `../../pages/musiclist/musiclist?playlistId=${this.properties.playlist.id}`,})},
...}

在playlist组件的wxml文件中添加点击事件

新建musiclist页面,在musiclist.js的onLoad方法打印接收到的数据

  onLoad: function (options) {console.log(options)},

点击任一歌单,进入musiclist页面,打印以下信息,说明页面跳转成功,并成功接收到了playlistId参数。


实现流程如下入所示:

添加云函数路由

在music云函数中添加musiclist路由

 // 云函数入口文件
const cloud = require('wx-server-sdk')
const TcbRouter = require('tcb-router')
const rp = require('request-promise')
const BASE_URL = 'http://xx.xx.xx'cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {const app = new TcbRouter({event})app.router('playlist', async (ctx, next) => {ctx.body = await cloud.database().collection('playlist').skip(event.start).limit(event.count).orderBy('createTime', 'desc').get().then((res) => {return res})})//这里直接将歌单详情接口中请求的数据返回给调用者app.router('musiclist', async (ctx, next) => {ctx.body = await rp(BASE_URL + '/playlist/detail?id=' + parseInt(event.playlistId)).then((res) => {console.log(res)return JSON.parse(res)})})return app.serve()
}

musiclist自定义组件

新建musiclist自定义组件

musiclist.wxml :

<block wx:for="{{musiclist}}" wx:key="id"><view class="musiclist-container {{item.id === playingId ? 'playing': ''}}" bind:tap="onSelect" data-musicid="{{item.id}}" data-index="{{index}}"><view class="musiclist-index">{{index+1}}</view><view class="musiclist-info"><view class="musiclist-name">{{item.name}}<text class="musiclist-alia">{{item.alia.length==0?"":item.alia[0]}}</text></view><view class="musiclist-singer">{{item.ar[0].name}} - {{item.al.name}}</view></view></view>
</block>

musiclist.js :

// components/musiclist/musiclist.js
const app = getApp()
Component({/*** 组件的属性列表*/properties: {musiclist: Array},/*** 组件的初始数据*/data: {playingId: -1},pageLifetimes: {show() {this.setData({playingId: parseInt(app.getPlayMusicId())})}},/*** 组件的方法列表*/methods: {onSelect(event) {console.log('被选中了')// 事件源 事件处理函数 事件对象 事件类型// console.log(event.currentTarget.dataset.musicid)const ds = event.currentTarget.datasetconst musicid = ds.musicidthis.setData({playingId: musicid})wx.navigateTo({url: `../../pages/player/player?musicId=${musicid}&index=${ds.index}`,})}}
})

musiclist.wxss :

.musiclist-container {display: flex;padding: 14rpx 20rpx;align-items: center; /* 垂直居中 */
}.musiclist-index {color: #888;font-size: 34rpx;width: 80rpx;
}.musiclist-info {flex-grow: 1;width: 0;
}.musiclist-name {font-size: 34rpx;color: #333;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;margin-bottom: 10rpx;
}.musiclist-alia {color: #888;
}.musiclist-singer {font-size: 24rpx;color: #888;
}.playing view, .playing text {color: #d43c33;
}

歌曲列表页面实现

新建musiclist歌曲列表页面

在musiclist.json 中引入musiclist自定义组件

{"usingComponents": {"x-musiclist": "/components/musiclist/musiclist"}
}

musiclist.wxml :

<view class='detail-container' style='background: url({{listInfo.coverImgUrl}}) no-repeat  top/cover'></view>
<view class='detail-mask'></view>
<view class='detail-info'><image src="{{listInfo.coverImgUrl}}" class='detail-img'></image><view class='detail'><view class='detail-nm'>{{listInfo.name}}</view></view>
</view><x-musiclist musiclist="{{musiclist}}" />

musiclist.wxss :

.detail-container {height: 320rpx;filter: blur(40rpx);opacity: 0.4;
}.detail-mask {position: absolute;width: 100%;height: 320rpx;background-color: #333;top: 0;left: 0;z-index: -1;
}.detail-img {width: 280rpx;height: 280rpx;margin-right: 24rpx;border-radius: 6rpx;
}.detail-info {display: flex;position: absolute;top: 0;left: 0;width: 100%;height: 320rpx;padding: 20rpx;box-sizing: border-box;align-items: center;
}.detail {flex-grow: 1;line-height: 60rpx;width: 0;
}.detail view {color: #fff;font-size: 24rpx;
}.detail .detail-nm {font-size: 36rpx;font-weight: 400;
}

musiclist.js :

// pages/musiclist/musiclist.js
Page({/*** 页面的初始数据*/data: {musiclist: [],listInfo: {},},/*** 生命周期函数--监听页面加载*/onLoad: function(options) {console.log(options)wx.showLoading({title: '加载中',})//调用music云函数的musiclist路由,获取歌曲列表数据wx.cloud.callFunction({name: 'music',data: {playlistId: options.playlistId,$url: 'musiclist'}}).then((res) => {console.log(res)const pl = res.result.playlistthis.setData({//歌单详情中的歌曲列表数据musiclist: pl.tracks,//歌单封面和歌单名listInfo: {coverImgUrl: pl.coverImgUrl,name: pl.name,}})wx.hideLoading()})},
})

实现效果如下:

微信小程序歌曲列表页实现相关推荐

  1. 新闻列表页flex_微信小程序新闻网站列表页

    javascript 技术文章 开发 微信小程序新闻网站列表页 在app.json中可以设置所有文件的头部导航颜色 (是window属性的子属性) 在具体页面可以单独设置该页面的导航颜色 (直接写该属 ...

  2. 微信小程序实现列表页的点赞和取消点赞功能!

    今天开发了一个文章的留言版块,于是想到要为某个留言点赞,点过赞的再次点击会取消点赞,代码如下: /*更新点赞*/ update_zan:function(e){ var that = this; va ...

  3. 微信小程序C语言通讯录,微信小程序のwxml列表渲染

    列表渲染存在的意义 以电商为例,我们希望渲染5个商品,而又希望容易改变,我们就要在wxml中动态添加. {{index+1}}:{{item.name}} Page({ data: { message ...

  4. 微信小程序新闻列表详情页

    微信小程序新闻列表详情页 不忘初心,方得始终.初心易得,始终难守 首先创建 post-detail 文件夹,创建四种文件. 修改 post.wxml 文件代码,给每个新闻块添加一个点击事件.并且我们要 ...

  5. 微信小程序 新闻列表及详情页

    微信小程序 新闻列表及详情页 页面效果 新闻列表 <view class="conatiner"><view class="news-item" ...

  6. 微信小程序插件功能页开发详细流程

     有问题可以扫码加我微信,有偿解决问题.承接小程序开发. 微信小程序开发交流qq群   173683895  . 526474645 : 正文: 关于新出的微信小程序插件功能页做一下记录,希望能帮到大 ...

  7. 手把手教你做短视频去水印微信小程序(2-首页)

    手把手教你做短视频去水印微信小程序系列教程(2-首页) 文章目录 手把手教你做短视频去水印微信小程序系列教程(2-首页) 前言 一.顶部banner 二.地址解析 1.整体代码 2. input框输入 ...

  8. 微信小程序多级列表绑定

    微信小程序多级列表绑定 1.wxml <view class="weui-form-preview margin-bottom" wx:key="" wx ...

  9. 微信小程序 视频列表 封面图 禁止多个视频同时播放

    微信小程序视频列表用到的组件是  video 链接  https://developers.weixin.qq.com/miniprogram/dev/component/video.html 先附上 ...

最新文章

  1. 解决git push 中remote: Permission to xxxxx.git denied to xxx. fatal: unable to access xxxx 403(转)
  2. java mvc引擎_SpringMvc+JavaConfig+Idea 搭建项目
  3. python终端会话_如何为Python终端提供持久性历史记录
  4. 我的docker随笔3:实现加速器,加快拉取镜像速度
  5. maven添加jar包依赖
  6. java报错 csrf_spring security配置(.antMatchers(/).permitAll())后,页面CSRF均报错
  7. sigar-amd64-linux.so,sigar,no libsigar-amd64-linux.so in java.library.path
  8. p2p网络终结者最高权限使用教程
  9. java 批量设置单元格边框,VC下设置Excel单元格的边框 (转)
  10. CodeForces 319B 栈
  11. net use的用法
  12. 人民的名义1-55集全 已看完(观后感)
  13. SQL Pivot 行转列
  14. oracle10.21数据库安装,安装并创建数据库【Oracle Database 10g】(三)
  15. VIF-Net:RGB和红外图像融合的无监督框架
  16. TorontoCity:众生观天下
  17. 大数据笔记10—java基础篇6(集合1-Collection)
  18. 初入神经网络剪枝量化4(大白话)
  19. 小米手机通过电脑上网
  20. jav: bigInteger

热门文章

  1. 企业数字化转型蓝图规划、生态体系建设、数字化管理平台建设方案
  2. 【Office】设置excel报错显示0
  3. 西科大计算机硕士在绵阳工作,西科大博士待遇!
  4. C++ 计算数组长度
  5. 自动化测试教程(17)生成测试报告
  6. 小程序丨从子页面退回父页面时的数据传递
  7. java方法调用之动态调用多态(重写override)的实现原理——方法表
  8. Vscode自动识别文件编码
  9. 国际象棋的棋子步数问题
  10. 微商怎么做如何快速找客源做好微信朋友圈营销