微信小程序之组件的集合(三)
看看音乐播放组件是如何实现完成的音乐的播放的!!!
一、音乐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模块的开发,继续继续...
微信小程序之组件的集合(三)的更多相关文章
- 微信小程序之组件的集合(四)
这个主要是来开发book的这个大模块的,看看如何优雅的开发出booked模块! 一.book模块的创建 这个就很简单了,创建一个大的框架是很简单的 二.组件的编写 (1)wxml组件页面的编码 首先是 ...
- 微信小程序之组件的集合(六)
这个将是最后一篇关于小程序的记录了,课程接近尾声,最后一个是关于用户的page页面,看看这个页面中有哪些值得学习的地方! 一.page中my开发 这个主要是展示用户喜欢的杂志,以及用户的信息,需要创建 ...
- 微信小程序之组件的集合(二)
继续微信小程序开发的学习,继续跟着老师的讲课思路来学习,继续开发项目中所用到的组件 一.导航栏navi组件的开发 1.新建组件的文件结构 这个就是先新建目录navi.然后在navi文件夹中新建comp ...
- 微信小程序之组件的集合(五)
这个是学习复杂的组件的封装的,在课程中,主要实现的是书单上方的搜索功能组件的开发,这个应该是较之前的组件是有一定难度的,但是现在学到现在,感觉前端的内容和后端的内容比较起来,还是比较容易的,而且好多内 ...
- 微信小程序之组件的集合(一)
小程序中是很强调组件中开发的,我们看到的页面是由许多组件组成的,但是这些组件是如何组合在一起的呢?来学习一下! 一.组件中数据的获取 接着上一篇文章,继续来优化代码,如何把从服务器上获取的数据显示到 ...
- 微信小程序弹窗组件
概述 自己封装的一个比较简单微信弹窗小组件,主要就是教会大家对微信小组件的用法和理解,因为微信小程序对组件介绍特别少,所以我就把自己的理解分享给大家 详细 代码下载:http://www.demoda ...
- 微信小程序从零开始开发步骤(三)底部导航栏
上一章节,我们分享了如何创建一个新的页面和设置页面的标题,这一章我们来聊聊底部导航栏是如何实现的.即点击底部的导航,会实现不同对应页面之间的切换. 我们先来看个我们要实现的底部导航栏的效果图:(三个导 ...
- 微信小程序_(组件)icon、text、rich-text、progress四大基础组件
微信小程序基础组件官方文档 传送门 Learn 一.icon图标组件 二.rich-text富文本组件 三.text文本组件 四.progress进度条组件 一.icon图标组件 type:icon的 ...
- 微信小程序_(组件)view视图容器
微信小程序view组件官方文档 传送门 Learn 一.hover-class属性 二.hover-start-time与hover-stay-time属性 三.hover-stop-propagat ...
随机推荐
- WPF 字体描边的实现方式
原文:WPF 字体描边的实现方式 <local:TextPath x:Name="PathEdge" Fill="Red" Stroke=" ...
- [转]Entity Framework教程(第二版)
源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...
- localhost与127.0.0.1区别
一.连接MySQL数据库有两种方式:TCP/IP(一般理解的端口的那种)和Unix套接字(一般叫socket或者sock) 大部分情况下,可以用localhost代表本机127.,但是在MySQL连接 ...
- 我的服装DRP之即时通讯——为WCF增加UDP绑定(应用篇)
发个牢骚,博客园发博文竟然不能写副标题.这篇既为我的服装DRP系列第二篇,也给为WCF增加UDP绑定系列收个尾.原本我打算记录开发过程中遇到的一些问题和个人见解,不过写到一半发现要写的东西实在太多,有 ...
- Python学习day01 - 计算机基础
第一天 什么是编程 语言就是用来交流的. 语言+火构成了人类的文明 Python语言用来和计算机交流 通过他和计算机交流,然后完成很多程序员想要完成的事情,就叫编程. 为什么要编程 节省劳动力,更高效 ...
- ssm项目 maven 项目pon.xml 配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 查看MySql版本号命令
转自:https://blog.csdn.net/qq_38486203/article/details/80324014 这里介绍四中不同的方法,它们分别运行在不同的环境中,最后对每种方法的优劣以 ...
- BaseController 的使用
为了提现代码的高可用性,我们可以常见的把dao层进行抽取,service ,但是很少看见有controller的抽取,其实dao层也是可以被抽取的. 首先我们定义一个BaseController接口 ...
- [转]WPF焦点概述
WPF 中,有两个与焦点有关的主要概念:键盘焦点和逻辑焦点. 键盘焦点指接收键盘输入的元素,而逻辑焦点指焦点范围中具有焦点的元素. 本概述将详细介绍这些概念. 理解这些概念之间的区别对于创建具有可以获 ...
- 利用zepto.js实现移动页面图片全屏滑动
HTML <%-- Created by IntelliJ IDEA. User: fanso2o Date: 2017/2/28 Time: 16:09 To change this temp ...