找回密码
 立即注册

QQ登录

只需一步,快速开始

微信小程序开发资源

关注:1587

所属分类: 微信开发 微信小程序开发资源



本版块为微信小程序资源分享区,包括微信小程序开发中可能会用到的各类小程序开发工具、小程序demo源码及开发教程等。

快捷导航www.henkuai.com):微信小程序社区微信小程序导航微信小程序资源下载微信小程序官方课程

[更新动态] 微信小程序小白项目开发案例之音乐播放器-页面渲染

[复制链接]
查看: 2491|回复: 1
最佳答案
1 

17

主题

21

帖子

825

积分

略知一二

积分
825
 楼主| 发表于 2017-2-16 17:36:57 | 显示全部楼层 |阅读模式
本帖最后由 peoples 于 2017-2-16 17:41 编辑

页面渲染

为了解决这个问题,我们给图片添加一个渐变的遮罩,就像图10-8那样,这样到达文字部分时,背景就变成了黑色,不会影响文字的显示,而且达到了由图片到底下列表颜色渐变的效果,非常美观。
这个效果主要靠我们的格式文件实现,我们先写我们熟悉的部分。
  1. .list-top {
  2.     position: relative;
  3.     height: 100%;
  4. }
  5. .list-top::after {         
  6.     content: " ";
  7.     display: block;
  8.     padding-top: 100%;
  9. }
  10. .top-info {
  11.     position: absolute;
  12.     bottom: 0;
  13.     width: 100%;
  14.     z-index: 3;
  15. }
  16. .top-img {
  17.     width: 100%;
  18.     height: 100%;
  19.     position: absolute;
  20. }

  21. .top-info-inner {
  22.     display: -webkit-box;
  23.     -webkit-box-align: center;
  24.     margin: 0 15px 25px;
  25.     color: #fff;
  26. }

  27. .top-info-text {
  28.     -webkit-box-flex: 1;
  29.     margin-right: 10px;
  30. }
  31. .top-info-title {
  32.     font-size: 24px;
  33.     line-height: 36px;
  34.     white-space: nowrap;
  35.     overflow: hidden;
  36. }
  37. .top-info-base {
  38.     font-size: 14px;
  39.     line-height: 20px;
  40. }
复制代码

“::after”表示在“.list-top”后边添加,为了是在不修改布局文件的情况下,添加视图以达到美化的效果。

我们需要添加的遮罩为布局里“top—back”这部分,格式文件为:
  1. .tl-top-b {
  2.     position: absolute;
  3.     bottom: 0;
  4.     width: 100%;
  5.     background-image: -webkit-linear-gradient(top,transparent,currentColor 80%);
  6. }
  7. .tl-top-b::after {
  8.     content: " ";
  9.     display: block;
  10.     padding-top: 60%;
  11. }
复制代码

-webkit-linear-gradient(top,transparent,currentColor 80%)这行代码为我们建立了线性渐变的效果,这样我们的图片底部就会出现渐变为黑色的效果了。
剩下播放按钮的样式,这里因为用到了渐变的遮罩和背景图,为了达到最好的效果,这个按钮就不能用图片来显示了,我们使用代码来创建一个播放按钮。
  1. .tl-top-play {
  2.     position: relative;
  3.     display: block;
  4.     width: 42px;
  5.     height: 42px;
  6.     margin-left: 10px;
  7.     border: solid 3px;
  8.     border-radius: 999px;
  9. }
  10. .tl-top-play::after {
  11.     content: " ";
  12.     position: absolute;
  13.     left: 50%;
  14.     top: 50%;
  15.     margin-top: -10px;
  16.     margin-left: -5px;
  17.     display: inline-block;
  18.     vertical-align: middle;
  19.     width: 0;
  20.     height: 0;
  21.     border-style: solid;
  22.     border-width: 10px 16px;
  23.     border-color: transparent transparent  transparent #fff;
  24. }
复制代码

视图建立完毕,开始为视图填充数据。
  1. //加载网络请求函数
  2. var MusicService = require('../../services/music');
  3. //获取应用实例
  4. var app = getApp();

  5. Page({
  6.     data: {
  7.         // text:"这是一个页面"
  8.         songList: [],
  9.         imgUrl: '',
  10.         id: 0,
  11.         topinfo: {},
  12.         update_time: '',
  13.     },
  14.     onLoad: function (options) {
  15.         // 页面初始化 options为页面跳转所带来的参数
  16.         var self = this;
  17.         var id = app.globalData.topListId;
  18.         this.setData({
  19.             id: id
  20.         });
  21.         MusicService.getTopListInfo(id, this.getTopListCallback)
  22.     },
  23. })
复制代码

这里我们获取了保存于全局变量里的topListId(即我们点击的排行分类的ID),然后使用这个ID请求网络。
  1. getTopListCallback: function (data) {
  2.         var imgUrl = data.topinfo.pic_album;
  3.         this.setData({
  4.             topinfo: data.topinfo,
  5.             update_time: data.update_time
  6.         });
  7.         this.setSongList(data.songlist);
  8.     },
复制代码

使用回调函数为我们的data赋值之后,这里调用了setSongList这个方法,通过这个方法我们把返回数据里我们需要的内容保存到songList里。
  1. setSongList: function (songs) {
  2.         var list = [];
  3.         for (var i = 0; i < songs.length; i++) {
  4.             var item = songs[i];
  5.             var song = {};
  6.             var album = {};

  7.             album.mid = item.data.albummid
  8.             album.id = item.data.albumid
  9.             album.name = item.data.albumname;
  10.             album.desc = item.data.albumdesc

  11.             song.id = item.data.songid;
  12.             song.mid = item.data.songmid;
  13.             song.name = item.data.songname;
  14.             song.title = item.data.songorig;
  15.             song.subTitle = '';
  16.             song.singer = item.data.singer;
  17.             song.album = album;
  18.             song.time_public = item.time_public;
  19.             song.img = 'http://y.gtimg.cn/music/photo_new/T002R150x150M000' + album.mid + '.jpg?max_age=2592000'
  20.             list.push(song);
  21.         }
  22.         this.setData({
  23.             songList: list
  24.         })
  25.     }
复制代码

最好完成此页面里的点击事件:
  1. mainTopTap: function (e) {
  2.         var list = this.data.songList;
  3.         app.setGlobalData({                //使用全局变量playList来保存我们当前的list
  4.             playList: list,
  5.             playIndex: 0                    //表示从第一首歌曲开始播放
  6.         });
  7.         wx.navigateTo({
  8.             url: '../play/play'            //跳转到播放页
  9.         });
  10.     },
  11.     musicItemTap: function (e) {
  12.         var dataSet = e.currentTarget.dataset;
  13.         var index = dataSet.index;                //获取点击的item的序号
  14.         var list = this.data.songList;
  15.         app.setGlobalData({
  16.             playList: list,
  17.             playIndex: index                      //从点击歌曲开始播放
  18.         });
  19.         wx.navigateTo({
  20.             url: '../play/play'
  21.         });
  22.     },
复制代码

上一节:微信小程序小白项目开发案例之音乐播放器-获取列表页数据
下一节:微信小程序小白项目开发案例之音乐播放器-完成相似页面




回复

使用道具 举报

最佳答案
0 

0

主题

128

帖子

138

积分

等待验证会员

积分
138
发表于 2019-9-9 17:52:46 | 显示全部楼层
谢谢分享谢谢分享谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



www.henkuai.com—微信开发者的分享交流平台,专注微信开发生态。

天津市滨海新区
中新生态城中成大道生态建设公寓9号楼3层301

微信公众号

广告推广
QQ:805874290

市场合作
zhongcong@henkuai.com