看看音乐播放组件是如何实现完成的音乐的播放的!!!

一、音乐music组件的开发

1、页面以及页面样式的开发

 // music组件页面开发
<view hidden="{{hidden}}" class="container">
<image class="classic-img {{playing?'rotation':''}}" src='{{img}}'/>
<image class="player-img" bind:tap="onPlay" src='{{!playing?playSrc:pauseSrc}}' />
<image class="tag" src='images/music@tag.png' />
<text class="content">{{content}}</text>
</view> // 样式的开发 css代码
.container{
display: flex;
flex-direction: column;
align-items: center
} .classic-img{
width: 422rpx;
height: 422rpx;
margin-top: 60rpx;
border-radius: 50%;
} .player-img{
width: 120rpx;
height: 120rpx;
position: relative;
bottom: 270rpx;
} .tag{
width: 44rpx;
height: 128rpx;
position: relative;
bottom: 160rpx;
right: 310rpx;
}
/* 旋转的动画效果css */
.rotation {
-webkit-transform: rotate(360deg);
animation: rotation 12s linear infinite;
-moz-animation: rotation 12s linear infinite;
-webkit-animation: rotation 12s linear infinite;
-o-animation: rotation 12s linear infinite;
} @-webkit-keyframes rotation {
from {
-webkit-transform: rotate(0deg);
} to {
-webkit-transform: rotate(360deg);
}
}

2、页面中逻辑代码的开发

这里用到了微信小程序中的音乐管理对象,音乐的播放都是通过这个来控制的。

 import {
classicBeh
} from '../classic-beh.js'; // 创建微信小程序中的音乐管理对象
const mMgr = wx.getBackgroundAudioManager(); Component({
/**
* 组件的属性列表 动画效果,当音乐播放的时候,图片是会转动的。如何实现???
* CSS3 小程序中的动画API
*/
behaviors: [classicBeh],
properties: {
src: String,
title: String
}, /**
* 组件的初始数据
*/
data: {
pauseSrc: 'images/player@pause.png',
playSrc: 'images/player@play.png',
playing: false
}, // 在组件实例进入页面节点树时执行
attached:function(event){
this._recoverStatus();
this._mointorSwitch();
}, // 生命周期函数 当组件被移除时候触发
detached:function(event){
// 只有当用wx:if 控制组件的显示的时候。才会起作用。hidden控制的时候不会起作用
// wx:if hidden 的区别 wx:if控制组件的显示的时候回重新完成的加载真个组件的生命周期,所以在频繁的切换组件的时候不建议使用的
// mMgr.stop();
},
/**
* 组件的方法列表
*/
methods: {
onPlay: function(event) {
// 图片要切换
if(!this.data.playing){
this.setData({
playing: true
})
mMgr.src = this.properties.src;
}else{
this.setData({
playing: false
})
mMgr.pause();
}
mMgr.title = this.properties.title;
}, // 控制音乐播放的图片的切换
_recoverStatus:function(){
// 当前组件中没有音乐在播放
if(mMgr.paused){
this.setData({
playing:false
})
return;
}
// 当前有一个组件中的音乐正在播放,并且当前位置就是那个音乐组件
if(mMgr.src == this.properties.src){
this.setData({
playing: true
})
}
}, // 监听总控开关和组件联动
_mointorSwitch:function(){
// 播放音乐
mMgr.onPlay(()=>{
this._recoverStatus();
})
// 暂停音乐
mMgr.onPause(()=>{
this._recoverStatus();
})
// 关闭音乐总开关
mMgr.onStop(()=>{
this._recoverStatus();
}) // 一首音乐自动名播放完成切换状态
mMgr.onEnded(()=>{
this._recoverStatus();
})
}
}
})

3、组件使用注意事项

组件在classic中使用的时候,需要考虑组件的显示与隐藏使用hidden属性还是wx:if来控制,至于这两者的区别,官方的文档来看:

https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/conditional.html#wx:if%20vs%20hidden

使用的代码:

 <!-- 这里只能使用wx:if 不能用自定义的hidden属性,涉及到生命周期函数的触发 -->
<v-music wx:if='{{classic.type == 200}}' img='{{classic.image}}' content='{{classic.content}}' src='{{classic.url}}' title='{{classic.title}}' />

二、小程序中tab栏的开发

这个不用自己重新编写,小程序中提供了现成的底部tab栏的,只需要在app.json 中配置一下就可以了:

 {
"pages": [
"pages/classic/classic",
"pages/book/book",
"pages/my/my"
],
"window": {
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTitleText": "SSC在雨中",
"navigationBarTextStyle": "black"
},
"sitemapLocation": "sitemap.json",
"tabBar" : {
"selectedColor":"#000000",
"backgroundColor": "#ffffff",
"color": "#c7c7c7",
"list":[
{
"pagePath":"pages/classic/classic",
"text": "流行",
"iconPath": "/images/tab/classic.png",
"selectedIconPath":"/images/tab/classic@highlight.png"
},
{
"pagePath": "pages/book/book",
"text": "书籍",
"iconPath": "/images/tab/book.png",
"selectedIconPath": "/images/tab/book@highlight.png"
},
{
"pagePath": "pages/my/my",
"text": "喜欢",
"iconPath": "/images/tab/my.png",
"selectedIconPath": "/images/tab/my@highlight.png"
}
]
}
}

接下来就是另一个大的模块的开发了,bool模块的开发,继续继续...

内容出处:七月老师《纯正商业级小程序开发》视频课程

微信小程序之组件的集合(三)的更多相关文章

  1. 微信小程序之组件的集合(四)

    这个主要是来开发book的这个大模块的,看看如何优雅的开发出booked模块! 一.book模块的创建 这个就很简单了,创建一个大的框架是很简单的 二.组件的编写 (1)wxml组件页面的编码 首先是 ...

  2. 微信小程序之组件的集合(六)

    这个将是最后一篇关于小程序的记录了,课程接近尾声,最后一个是关于用户的page页面,看看这个页面中有哪些值得学习的地方! 一.page中my开发 这个主要是展示用户喜欢的杂志,以及用户的信息,需要创建 ...

  3. 微信小程序之组件的集合(二)

    继续微信小程序开发的学习,继续跟着老师的讲课思路来学习,继续开发项目中所用到的组件 一.导航栏navi组件的开发 1.新建组件的文件结构 这个就是先新建目录navi.然后在navi文件夹中新建comp ...

  4. 微信小程序之组件的集合(五)

    这个是学习复杂的组件的封装的,在课程中,主要实现的是书单上方的搜索功能组件的开发,这个应该是较之前的组件是有一定难度的,但是现在学到现在,感觉前端的内容和后端的内容比较起来,还是比较容易的,而且好多内 ...

  5. 微信小程序之组件的集合(一)

    小程序中是很强调组件中开发的,我们看到的页面是由许多组件组成的,但是这些组件是如何组合在一起的呢?来学习一下!  一.组件中数据的获取 接着上一篇文章,继续来优化代码,如何把从服务器上获取的数据显示到 ...

  6. 微信小程序弹窗组件

    概述 自己封装的一个比较简单微信弹窗小组件,主要就是教会大家对微信小组件的用法和理解,因为微信小程序对组件介绍特别少,所以我就把自己的理解分享给大家 详细 代码下载:http://www.demoda ...

  7. 微信小程序从零开始开发步骤(三)底部导航栏

    上一章节,我们分享了如何创建一个新的页面和设置页面的标题,这一章我们来聊聊底部导航栏是如何实现的.即点击底部的导航,会实现不同对应页面之间的切换. 我们先来看个我们要实现的底部导航栏的效果图:(三个导 ...

  8. 微信小程序_(组件)icon、text、rich-text、progress四大基础组件

    微信小程序基础组件官方文档 传送门 Learn 一.icon图标组件 二.rich-text富文本组件 三.text文本组件 四.progress进度条组件 一.icon图标组件 type:icon的 ...

  9. 微信小程序_(组件)view视图容器

    微信小程序view组件官方文档 传送门 Learn 一.hover-class属性 二.hover-start-time与hover-stay-time属性 三.hover-stop-propagat ...

随机推荐

  1. Struts2基本总结

    现在Struts2慢慢退出舞台了,但是很多项目还需要用Struts2进行开发和维护,这里就简单的重新快速的掌握这门技术 Struts2的相关配置文件 * default.properties     ...

  2. Leetcode187. Repeated DNA Sequences重复的DNA序列

    所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助. 编写一个函数 ...

  3. SG函数模板(洛谷2197nim游戏

    #include <iostream> #include <cstdio> #include <queue> #include <algorithm> ...

  4. 数组(Array)与 字符串(String)公用的属性与方法

    数组与字符串都有很多方法,有一些方法是公用的,在这里就将数组与字符串公用的方法提取出来,方便大家的记忆 1. length 可通过str.length与arr.length分别取到字符串与数组的长度: ...

  5. Intel RealSense Depth Camera D435安装ROS 驱动——Ubuntu16.04

    官方教程 软件包下载链接 https://github.com/IntelRealSense/realsense-ros Download/Clone librealsense github repo ...

  6. sudo apt-get常用命令

    一.卸载 1. sudo apt-get autoclean 如果你的硬盘空间不大的话,可以定期运行这个程序,将已经删除了的软件包的.deb安装文件从硬盘中删除掉.如果你仍然需要硬盘空间的话,可以试试 ...

  7. C++ Builder 2007中应用数据库SQLite(转载)

    第一次使用SQLite数据库,而且BCB2007也不熟,这两者的结合那就更让我难受了.今天只是简单的在BCB中调用SQLite,就花了我一下午时间,这也足见本人知识的浅薄,另一方面也说明我对这二者确实 ...

  8. centos6 php7 安装 memcache 和 memcached

    下载安装memcache 注意:官网的memcache包,暂时好像不支持php7.所以到下面地址下载memcache包,切换到php7分支 php7 memcache github 下载地址 官网下载 ...

  9. UITableViewCell delete button 上有其它覆盖层

    第一种解决办法: // Fix for iOS7, when backgroundView comes above "delete" button - (void)willTran ...

  10. android Serializable 和 Parcelable 区别

      android 中自定义的对象序列化的问题有两个选择一个是Parcelable,另外一个是Serializable. 一 序列化原因: 1.永久性保存对象,保存对象的字节序列到本地文件中:2.通过 ...