[TOC]
### 1. 創建一個音樂實例
~~~
//創建一個音樂實例(在有播放的js文件中的頂部)
const audio =wx.getBackgroundAudioManager();
~~~
### 2. wxml 和js文件配置
~~~
//wxml (點擊觸發播放函數同時改變狀態圖標)
//背景圖片改變
<image src="{{isplay?list[0].musiccoverImg:list[0].imgSrc}}"></image>
//音樂圖片改變
<image bindtap = "playmusic" src="{{isplay?'/images/music/music-stop.png':'/images/music/music-start.png'}}" class="music"></image>
//js
data: {
isplay:false,
},
~~~
### 3. 播放音樂函數(重點)
~~~
js文件中
playmusic(){
var url=this.data.list[0].musicurl;
// console.log(url)
if(this.data.isplay){
wx.stopBackgroundAudio(); // 停止音頻
// audio.onPause();
this.setData({
isplay: false
})
}else{
wx.playBackgroundAudio(); //播放音頻
// audio.onPlay();
audio.src=url;
this.setData({
isplay: true
})
}
},
~~~
### 4.在app.js創建全局變量接收正在播放頁面的id和圖片的狀態
~~~
globalData:{
g_isPlay:false, //自定義名字
g_currentId:null // 自定義名字
}
~~~
### 5. 狀態同步 創建監聽函數 在onload中調用 (此方法已廢棄)
~~~
onMusic() {
var self = this;
//監聽音樂播放事件(點擊后觸發的事件)
wx.onBackgroundAudioPlay((result) => {
// console.log(1)
this.setData({
isplay: true
});
app.globalData.g_isPlay=true;
//進入頁面點擊播放將id傳到外部的局部變量中 退出當前頁面換一個頁面進入不會觸發該事件 其他的點擊事件將數據清空
app.globalData.g_currentId = self.data.list[0].id
});
wx.onBackgroundAudioPause((result) => {
// console.log(2)
this.setData({
isplay: false
})
app.globalData.g_isPlay = false;
app.globalData.g_currentId = null;
});
wx.onBackgroundAudioStop((result)=>{
// console.log(3)
self.setData({
isplay: false
});
app.globalData.g_currentId = null;
});
},
//在onload函數中調用和判斷
this.onMusic();
if(app.globalData.g_isPlay && app.globalData.g_currentId==options.id){
this.setData({
isplay:true
});
}
~~~
### 6. 狀態同步 創建監聽函數 (新方法 常用方法)
~~~
// 音樂暫停監聽(頁面加載時如果音樂為暫停狀態改變音樂的狀態圖標)
//當 音樂暫停 時觸發的函數
audio.onPause(() => {
// console.log(1)
this.setData({
isplay: false
})
app.globalData.g_isPlay = false;
app.globalData.g_currentId = null;
});
//當 音樂結束 時觸發的函數
audio.onEnded(() => {
// console.log(1)
this.setData({
isplay: false
})
});
//當音樂 停止播放時 時觸發的函數
audio.onStop(() => {
// console.log(1)
this.setData({
isplay: false
})
});
// 音樂播放監聽(頁面加載時如果音樂為播放狀態改變音樂的狀態圖標)
//當 音樂開始播放 時觸發的函數
audio.onPlay(() => {
// console.log(2)
this.setData({
isplay: true
})
app.globalData.g_isPlay = true;
// 進入頁面點擊播放將id傳到外部的局部變量中 退出當前頁面換一個頁面進入不會觸發該事件
app.globalData.g_currentId = self.data.list[0].id;
});
// this.onMusic();
if (app.globalData.g_isPlay && app.globalData.g_currentId == key) {
this.setData({
isplay: true
});
}
~~~
### 整體代碼展示
~~~
// pages/details/details.js
const loacal = require("../../data/local");
//創建一個音樂實例
const audio = wx.getBackgroundAudioManager();
const app = getApp();
Page({
/**
* 頁面的初始數據
*/
data: {
postList: [],
list: [],
isplay: false,
},
/**
* 生命周期函數--監聽頁面加載
*/
onLoad: function (options) {
var key = options.id;
// console.log(key)
var self = this;
var postList = loacal.postList;
var list = [];
var temp = {};
temp.author = postList[key].author;
temp.dateTime = postList[key].dateTime;
temp.detail = postList[key].detail;
temp.musicurl = postList[key].music.url;
temp.musiccoverImg = postList[key].music.coverImg;
temp.imgSrc = postList[key].imgSrc;
temp.avatar = postList[key].avatar;
temp.title = postList[key].title;
//數據下的id
temp.id = postList[key].postId;
list.push(temp);
this.setData({
postList,
list,
});
// 音樂暫停監聽(頁面加載時如果音樂為暫停狀態改變音樂的狀態圖標)
audio.onPause(() => {
// console.log(1)
this.setData({
isplay: false
})
app.globalData.g_isPlay = false;
app.globalData.g_currentId = null;
});
// 音樂播放監聽(頁面加載時如果音樂為播放狀態改變音樂的狀態圖標)
audio.onPlay(() => {
// console.log(2)
this.setData({
isplay: true
})
app.globalData.g_isPlay = true;
// 進入頁面點擊播放將id傳到外部的局部變量中 退出當前頁面換一個頁面進入不會觸發該事件
app.globalData.g_currentId = self.data.list[0].id;
});
// this.onMusic();
if (app.globalData.g_isPlay && app.globalData.g_currentId == key) {
this.setData({
isplay: true
});
}
},
playmusic() {
var url = this.data.list[0].musicurl;
// console.log(url)
if (this.data.isplay) {
wx.stopBackgroundAudio(); // 停止音頻
audio.onPause();
this.setData({
isplay: false
})
} else {
wx.playBackgroundAudio(); //播放音頻
// audio.onPlay();
audio.src = url;
this.setData({
isplay: true
})
}
},
//進入頁面是根據音樂的播放狀態來改變音樂狀態圖標
// onMusic() {
// var self = this;
// //監聽音樂播放事件(點擊后觸發的事件)
// wx.onBackgroundAudioPlay((result) => {
// // console.log(1)
// this.setData({
// isplay: true
// });
// app.globalData.g_isPlay = true;
// //進入頁面點擊播放將id傳到外部的局部變量中 退出當前頁面換一個頁面進入不會觸發該事件
// app.globalData.g_currentId = self.data.list[0].id;
// });
// wx.onBackgroundAudioPause((result) => {
// // console.log(2)
// this.setData({
// isplay: false
// })
// app.globalData.g_isPlay = false;
// app.globalData.g_currentId = null;
// });
// wx.onBackgroundAudioStop((result) => {
// // console.log(3)
// self.setData({
// isplay: false
// });
// app.globalData.g_currentId = null;
// });
// },
/**
* 生命周期函數--監聽頁面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函數--監聽頁面顯示
*/
onShow: function () {
},
/**
* 生命周期函數--監聽頁面隱藏
*/
onHide: function () {
},
/**
* 生命周期函數--監聽頁面卸載
*/
onUnload: function () {
},
/**
* 頁面相關事件處理函數--監聽用戶下拉動作
*/
onPullDownRefresh: function () {
},
/**
* 頁面上拉觸底事件的處理函數
*/
onReachBottom: function () {
},
/**
* 用戶點擊右上角分享
*/
onShareAppMessage: function () {
}
})
~~~
~~~
<!--pages/details/details.wxml-->
<image src="{{isplay?list[0].musiccoverImg:list[0].imgSrc}}"></image>
<image bindtap = "playmusic" src="{{isplay?'/images/music/music-stop.png':'/images/music/music-start.png'}}" class="music"></image>
~~~
- 前期準備
- 軟件安裝配置
- 語法 以及 功能 的實現
- 小程序中的 輪播
- 翻轉輪播
- 實現 跳轉 頁面
- 詳談 跳轉頁面
- for 循環 渲染 頁面(重點)
- 點擊 改變 元素內容
- 功能 封裝(創建、使用 模板)(重點)
- js模塊化(重點)
- if-else實現 三目運算
- 底部導航欄tabBar 實現
- 小程序中的 函數調用 方法
- 小程序中的 block 包裹元素
- 小程序中的 hover事件
- import 標簽(重點)
- 其他
- 在本地模擬接口取數據
- 點擊跳轉 并將該元素的id一起傳遞給跳轉的頁面
- 點擊詳情頁顯示
- 點擊事件(bindtap/catchtap)
- 圖片的mode屬性
- 跳轉頁面時實現頂部顯示頁面標題
- hello world
- 將豆瓣服務器接口設置在本地
- 組件
- 地圖
- 下拉刷新
- 數據加載 loading...
- 動態設置導航(title設置)
- 實現js代碼的模塊化
- 傳參
- 組件中的生命周期函數
- 實戰
- 發送http請求
- 可用的豆瓣接口
- 處理豆瓣列表頁的數據
- 從接口上取數據渲染到頁面上1
- 從接口上取數據渲染頁面實現瀑布流2
- 瀑布流
- 音樂播放
- 文章詳情頁
- 音樂播放組件
- 音樂播放 最終版
- 電影(封裝取數據渲染)
- 分享與收藏
- 搜索框
- 將電影列表數據放緩存
- 零碎知識點
- 談組件
- 請求封裝 (重點)
- 實現簡單需求的請求失敗的封裝
- 使用class實現顯示各種錯誤信息
- 再次封裝帶class的請求實現改變里面給的url
- 使用promise 封裝http
- promise
- generator
- 01.介紹
- 02. 基本
- 03. 實例
- 04.yield
- asyns
- 01. 介紹
- 02. 使用
- 03. 取豆瓣
- 子組件(模板文件)接收父組件傳來的參數并改變其值
- 模塊化
- 在模板中提取相同的部分behavior
- 字符串與數組之間的轉換
- 子組件向父組件傳參
- 談 triggerEvent
- 整體展示
- 父組件向子組件傳wxml (在兩個組件比較相似的情況 定義卡 槽傳 wxml)
- 傳css (在父組件中定義子組件的樣式)
- 使用wxs給wxml傳js
- 點贊
- 小程序中的正則
- 組件中實現下拉刷新
- 用戶授權
- 組件點擊圖片獲取信息
- 說明
- 小程序上下滑動