微信 程序 組件 集合 欄目 快樂工作 简体版
原文   原文鏈接

  看看音樂播放組件是如何實現完成的音樂的播放的!!!css

1、音樂music組件的開發html

一、頁面以及頁面樣式的開發web

 1 // music組件頁面開發
 2 <view hidden="{{hidden}}" class="container">
 3   <image class="classic-img {{playing?'rotation':''}}" src='{{img}}'/>
 4   <image class="player-img" bind:tap="onPlay" src='{{!playing?playSrc:pauseSrc}}' />
 5   <image class="tag" src='images/music@tag.png' />
 6   <text class="content">{{content}}</text>
 7 </view>
 8 
 9 // 樣式的開發 css代碼
10 .container{
11   display: flex;
12   flex-direction: column;
13   align-items: center
14 }
15 
16 .classic-img{
17   width: 422rpx;
18   height: 422rpx;
19   margin-top: 60rpx;
20   border-radius: 50%;
21 }
22 
23 .player-img{
24   width: 120rpx;
25   height: 120rpx;
26   position: relative;
27   bottom: 270rpx;
28 }
29 
30 .tag{
31   width: 44rpx;
32   height: 128rpx;
33   position: relative;
34   bottom: 160rpx;
35   right: 310rpx;
36 }
37 /* 旋轉的動畫效果css */
38 .rotation {
39   -webkit-transform: rotate(360deg);
40   animation: rotation 12s linear infinite;
41   -moz-animation: rotation 12s linear infinite;
42   -webkit-animation: rotation 12s linear infinite;
43   -o-animation: rotation 12s linear infinite;
44 }
45 
46 
47 @-webkit-keyframes rotation {
48   from {
49     -webkit-transform: rotate(0deg);
50   }
51 
52   to {
53     -webkit-transform: rotate(360deg);
54   }
55 }

二、頁面中邏輯代碼的開發json

這裏用到了微信小程序中的音樂管理對象,音樂的播放都是經過這個來控制的。小程序

 1 import {
 2   classicBeh
 3 } from '../classic-beh.js';
 4 
 5 // 建立微信小程序中的音樂管理對象
 6 const mMgr = wx.getBackgroundAudioManager();
 7 
 8 Component({
 9   /**
10    * 組件的屬性列表 動畫效果,當音樂播放的時候,圖片是會轉動的。如何實現???
11    * CSS3 小程序中的動畫API
12    */
13   behaviors: [classicBeh],
14   properties: {
15     src: String,
16     title: String
17   },
18 
19   /**
20    * 組件的初始數據
21    */
22   data: {
23     pauseSrc: 'images/player@pause.png',
24     playSrc: 'images/player@play.png',
25     playing: false
26   },
27 
28   // 在組件實例進入頁面節點樹時執行
29   attached:function(event){
30      this._recoverStatus();
31      this._mointorSwitch();
32   },
33 
34   // 生命週期函數 當組件被移除時候觸發
35   detached:function(event){
36     // 只有當用wx:if 控制組件的顯示的時候。纔會起做用。hidden控制的時候不會起做用
37     // wx:if hidden 的區別 wx:if控制組件的顯示的時候回從新完成的加載真個組件的生命週期,因此在頻繁的切換組件的時候不建議使用的
38     // mMgr.stop();
39   },
40   /**
41    * 組件的方法列表
42    */
43   methods: {
44     onPlay: function(event) {
45       // 圖片要切換
46       if(!this.data.playing){
47         this.setData({
48           playing: true
49         })
50         mMgr.src = this.properties.src;
51       }else{
52         this.setData({
53           playing: false
54         })
55         mMgr.pause();
56       }
57       mMgr.title = this.properties.title;
58     },
59 
60   // 控制音樂播放的圖片的切換
61     _recoverStatus:function(){
62       // 當前組件中沒有音樂在播放
63       if(mMgr.paused){
64         this.setData({
65           playing:false
66         })
67         return;
68       }
69       // 當前有一個組件中的音樂正在播放,而且當前位置就是那個音樂組件
70       if(mMgr.src == this.properties.src){
71         this.setData({
72           playing: true
73         })
74       }
75     },
76 
77     // 監聽總控開關和組件聯動
78     _mointorSwitch:function(){
79       // 播放音樂
80       mMgr.onPlay(()=>{
81         this._recoverStatus();
82       })
83       // 暫停音樂
84       mMgr.onPause(()=>{
85         this._recoverStatus();
86       })
87       // 關閉音樂總開關
88       mMgr.onStop(()=>{
89         this._recoverStatus();
90       })
91 
92       // 一首音樂自動名播放完成切換狀態
93       mMgr.onEnded(()=>{
94         this._recoverStatus();
95       })
96     }
97   }
98 })

三、組件使用注意事項微信小程序

組件在classic中使用的時候,須要考慮組件的顯示與隱藏使用hidden屬性仍是wx:if來控制,至於這二者的區別,官方的文檔來看:微信

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

使用的代碼:函數

1 <!-- 這裏只能使用wx:if 不能用自定義的hidden屬性,涉及到生命週期函數的觸發 -->
2   <v-music wx:if='{{classic.type == 200}}' img='{{classic.image}}' content='{{classic.content}}' src='{{classic.url}}' title='{{classic.title}}' />

2、小程序中tab欄的開發flex

這個不用本身從新編寫,小程序中提供了現成的底部tab欄的,只須要在app.json 中配置一下就能夠了:

 1 {
 2   "pages": [
 3     "pages/classic/classic",
 4     "pages/book/book",
 5     "pages/my/my"
 6   ],
 7   "window": {
 8     "navigationBarBackgroundColor": "#ffffff",
 9     "navigationBarTitleText": "SSC在雨中",
10     "navigationBarTextStyle": "black"
11   },
12   "sitemapLocation": "sitemap.json",
13   "tabBar" : {
14     "selectedColor":"#000000",
15     "backgroundColor": "#ffffff",
16     "color": "#c7c7c7",
17     "list":[
18       {
19         "pagePath":"pages/classic/classic",
20         "text": "流行",
21         "iconPath": "/images/tab/classic.png",
22         "selectedIconPath":"/images/tab/classic@highlight.png"
23       },
24       {
25         "pagePath": "pages/book/book",
26         "text": "書籍",
27         "iconPath": "/images/tab/book.png",
28         "selectedIconPath": "/images/tab/book@highlight.png"
29       },
30       {
31         "pagePath": "pages/my/my",
32         "text": "喜歡",
33         "iconPath": "/images/tab/my.png",
34         "selectedIconPath": "/images/tab/my@highlight.png"
35       }
36     ]
37   }
38 }

 接下來就是另外一個大的模塊的開發了,bool模塊的開發,繼續繼續...

 

內容出處:七月老師《純正商業級小程序開發》視頻課程
視頻課程連接:https://coding.imooc.com/class/251.html
相關文章
相關標籤/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。
本站公眾號
   歡迎關注本站公眾號,獲取更多信息