> 效果如图
![](https://box.kancloud.cn/43dbbf35e9fcdd09111b1f367467346f_242x220.gif)
>1. 制作component组件
在组件中通过play是否为true控制: 图片是否加`rotate` 旋转属性,以及播放图片的src
```
--music.wxml--
<view class="banner">
<image class="{{play?'rotate':''}}" src="/images/banner.png" />
<image class="play" src="{{play?'/images/play.png':'/images/pause.png'}}"
mode="widthFix" bindtap="onMusic"/>
</view>
```
```
--rotate动画--
.rotate {
animation: rotate 3s linear infinite;
//linear线性平滑过渡
}
@keyframes rotate {
0% { transform: rotate(0);}
100% { transform: rotate(360deg);}
}
```
>2. 注册并使用组件
先在index.json中注册组件
```
"usingComponents":{
"v-music": "/components/music/music"
}
```
再在index.wxml中使用并通过属性传递数据
```
<v-music title="{{music.title}}" url="{{music.url}}"></v-music>
```
>3. 组件接受所需数据
```
--music.js--
properties: {
title: String,
url: String
}
```
>4. 实现点击功能
```
const audio = wx.getBackgroundAudioManager();
methods: {
onPlay(){
if(this.data.isPlay){
audio.pause();
this.setData({
isPlay: !this.data.isPlay
})
}else{
audio.title = this.properties.mTitle;
audio.src = this.properties.mUrl;
this.setData({
isPlay: !this.data.isPlay
});
}
}
},
attached(){
/* 音乐播放 */
audio.onPlay(()=>{
this.setData({
play: true
});
});
/* 暂停 */
audio.onPause(()=>{
this.setData({
play: false
});
});
/* 停止 */
audio.onStop(()=>{
this.setData({
play: false
});
});
/* 播放完 */
audio.onEnded(()=>{
this.setData({
play: false
});
});
}
```
- 小程序配置
- 1 开始第一个小程序
- 2 navigationBar
- 3 flex弹性布局
- 4 响应式长度单位: rpx
- 5 添加新的页面
- 6 配置tabBar
- 7 欢迎页跳转到有tabBar的页面
- 小程序语法
- 1. 数据绑定
- 2. 列表渲染
- 3. 条件渲染
- 4. 小程序和vue data读取方式
- 5. 属性的数据绑定方式
- 6. bindtap与catchtap
- 7. event.targe和event.currentTarget
- 组件&demo
- 1. scroll-view
- 2. swiper
- 3. 制作一个音乐播放组件
- 4. chooseImage配合缓存创建头像
- 5. 获取input表单value(搜索栏实现)
- 6. map
- 7. Form表单提交获取数据
- 小程序API
- 1. 缓存 wx.setStorageSync
- 2. 选择图片 wx.chooseImage
- 3. 加载 wx.showLoading
- 4. 弹出框 wx.showToast
- 5. 分享与获取用户信息
- 项目结构类
- 1. 代码封装
- 2. wx.request请求数据分离
- 3. 组件
- 1. slot
- 2. 父元素传递class到子元素
- 3. 子组件向父组件传值
- 4. wxml中引用wxs封装方法