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

一、音乐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. vue表格之:summary-method="getSummaries"与show-summary(列求和)

    //表格列求和 <el-table :summary-method="getSummaries" show-summary></el-table> getS ...

  2. java 上传MultipartFile和String post请求

    /** * POST Multipart Request * @Description: * @param requestUrl 请求url * @param requestText 请求参数 * @ ...

  3. JWT生成token

    1.JWT简介 JSON Web Token 简称JWT.一个JWT实际上就是一个字符串,它由三部分组成,头部.载荷与签名.JWT生成的token是这样的 2.Json Web Token(JWT)生 ...

  4. centos6 nginx 配置本地https访问

    安装准备 yum install openssl openssl-devel 生成文件 cd /usr/local/nginx/conf # 生成密钥privkey.pem: openssl genr ...

  5. https,http和ssl的关系

    https,http和ssl这三者是什么关系呢? http是超文本传输协议,浏览器利用这一协议就可以访问各种网站了. ssl指Secure Sockets Layer 安全套接层,是一种保证网络数据传 ...

  6. Android基础控件DatePicker的使用

    1.简介 DatePicker日期选择器,自带spinner和calendar两种模式,相关属性: android:calendarTextColor : 日历列表的文本的颜色 android:cal ...

  7. SPSS实例教程:多重线性回归,你用对了么

    SPSS实例教程:多重线性回归,你用对了么 在实际的医学研究中,一个生理指标或疾病指标往往受到多种因素的共同作用和影响,当研究的因变量为连续变量时,我们通常在统计分析过程中引入多重线性回归模型,来分析 ...

  8. v-bind:class

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  9. java基础之二维数组不定义列数

    有一种特殊的二维数组,它的行数确定,但是每行的列数不确定.这样的的数组实现方法:先创建制定行数,列数缺省的二维数组,然后对数组的每一行重新初始化.举例如下: package day5; //第二种定义 ...

  10. 01_jQuery初识

    1.为什么要学习jQuery?做同样的事情,jQuery写起来极其简练(write less , do more) 2.jQuery是什么?jQuery相当于Python的第三方模块,原生JS DOM ...