看看音樂播放組件是如何實現完成的音樂的播放的!!!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模塊的開發,繼續繼續...