微信小程式:自定義音樂進度條
需求:顯示音樂播放按鈕、可手動拖拽進度條;頁面中含多個音樂,播放當前音樂時暫停其他音樂播放。
小程式自帶標籤 audio
小程式自帶的audio標籤含固定的樣式,且有最小尺寸。目前專案也不含name和author欄位,所以放棄audio標籤。
實現效果圖
初始化音樂資料
<text>{{currentProcess}}</text>
<slider bindchange="" bindtouchstart="" bindtouchend="" max="{{totalProcessNum}}" min="0" value="{{currentProcessNum }}" disabled="{{canSlider}}"></slider>
<text>{{totalProcess}}</text>
<image src="{{audioListObj['q'+questionObj.id].imgUrl}}" data-audioId="q{{questionObj.id}}" bindtap="clickPlayAudio"></image> <!-- clickPlayAudio 播放按鈕觸發事件 -->
src: _this.data.questionObj.audio,
currentProcess: '--:--',//顯示 將currentProcessNum處理成時間形式展示
currentProcessNum: 0,//賦值
totalProcess: '--:--',
totalProcessNum: 1,
seek: -1,
imgUrl: '../../images/play.png',
canSlider: false //是否可以滑動,防止載入音樂時 使用者滑動進度條
點選播放按鈕觸發事件
說明:
因頁面中音樂數量較多,所以只有當用戶點選播放,再去載入audio檔案。
wx.getBackgroundAudioManager()物件,同一時間只會播放一個audio檔案。當重新賦值src時,會切換檔案。
利用onTimeUpdate方法實時更新播放進度。
onEnded方法處理audio播放完畢後的資料重新初始化事件。
變數clickPlayAudioFunctionIsRuning用來防止使用者連續點選按鈕。
const _this = this;
const _data = _this.data;
//防止使用者點選播放按鈕太快
if (_data.clickPlayAudioFunctionIsRuning){
return ;
}
_this.setData({
clickPlayAudioFunctionIsRuning: true
})
var _obj = _this.data.audioListObj;
const audioId = $this.currentTarget.dataset.audioid;
var backgroundAudioManager = wx.getBackgroundAudioManager();
if (_this.data.audioListObj[audioId].imgUrl == '../../images/play.png'){
console.log('轉換至播放狀態')
//切換所有播放按鈕為暫停狀態
for (var j in _this.data.audioListObj) {
if (j && _this.data.audioListObj[j]) {
_this.data.audioListObj[j].imgUrl = '../../images/play.png';
}
}
_this.setData({
audioListObj: _this.data.audioListObj,
})
//暫停正在播放音樂
wx.stopBackgroundAudio();
_obj[audioId].imgUrl = '../../images/paused.png';
backgroundAudioManager.title = '測試';
//設定音樂開始時間
if (_this.data.audioListObj[audioId].currentProcessNum != 0){
backgroundAudioManager.startTime = _this.data.audioListObj[audioId].currentProcessNum;
}
backgroundAudioManager.src = _this.data.audioListObj[audioId].src;
_obj[audioId].canSlider = true;
backgroundAudioManager.play();
// 背景音訊自然播放結束事件
backgroundAudioManager.onEnded(function () {
var _obj = _this.data.audioListObj;
_obj[audioId].imgUrl = '../../images/play.png';
_obj[audioId].currentProcess = 0;
_obj[audioId].currentProcessNum = 0;
_this.setData({
audioListObj: _obj
})
})
//背景音訊播放進度更新事件
backgroundAudioManager.onTimeUpdate(function (callback) {
_obj = _this.data.audioListObj;
//設定總時長
if (_obj[audioId] && _obj[audioId].totalProcess && (_obj[audioId].totalProcess == '--:--' || _obj[audioId].totalProcess == '00:00')) {
console.log(_this.formatTime(backgroundAudioManager.duration))
_obj[audioId].totalProcess = _this.formatTime(backgroundAudioManager.duration);
_obj[audioId].totalProcessNum = backgroundAudioManager.duration;
_this.setData({
audioListObj: _obj
})
}
if (!_this.data.isMovingSlider) {
//更新進度
_obj[audioId].currentProcess = _this.formatTime(backgroundAudioManager.currentTime);
_obj[audioId].currentProcessNum = backgroundAudioManager.currentTime;
_this.setData({
audioListObj: _obj
})
}
})
} else if (_this.data.audioListObj[audioId].imgUrl == '../../images/paused.png'){
console.log('轉換至暫停狀態')
_obj[audioId].imgUrl = '../../images/play.png'
wx.pauseBackgroundAudio();
backgroundAudioManager.pause();
}
_this.setData({
audioListObj: _obj,
clickPlayAudioFunctionIsRuning: false
})
滑動進度條觸發事件
const _this = this;
const _data = _this.data;
const _obj = _this.data.audioListObj;
const position = $this.detail.value;
const audioId = $this.currentTarget.dataset.audioid;
var backgroundAudioManager = app.globalData.bgAudioListManager;
_obj[audioId].currentProcess = _this.formatTime(position);
_obj[audioId].currentProcessNum = position;
//如果正在播放
if (_obj[audioId].imgUrl == '../../images/paused.png'){
_obj[audioId].seek = position;
if (_obj[audioId].seek != -1) {
wx.seekBackgroundAudio({
position: Math.floor(position),
})
_obj[audioId].seek = -1;
}
}
_this.setData({
audioListObj: _obj
})
開始滑動觸發事件
this.setData({
isMovingSlider: true
});
結束滑動觸發事件
this.setData({
isMovingSlider: false
});
備註:
程式碼只用於參考,具體如何實現要結合自己的專案結構。
相關推薦
微信小程式:自定義音樂進度條
需求:顯示音樂播放按鈕、可手動拖拽進度條;頁面中含多個音樂,播放當前音樂時暫停其他音樂播放。 小程式自帶標籤 audio 小程式自帶的audio標籤含固定的樣式,且有最小尺寸。目前專案也不含name和author欄位,所以放棄audio標籤。 實現
微信小程式--15自定義元件
關於自定義元件有兩個知識點需要說一下: 1.子元件向父元件傳引數 在子元件內部,這樣觸發事件,傳遞引數 在父元件內部這樣接收引數 2. 父元件向子元件傳引數 在父元件這裡定義一個now-in 在子元件這裡引入 這樣的話,nowIn就相當於data裡
微信小程式 Canvas 自定義時間顯示器 數碼管顯示
微信小程式自定義時間顯示器Demo 廢話不多話,還是依舊上圖再說,哈哈 怎麼樣,效果還是不錯的吧,因專案要求,要畫出類似於數碼管顯示的時間樣式,沒辦法,雖然不咋過好弄,但工作畢竟得做,於是乎,樓主,花了3個小時在那裡硬生生的算座標,差不多還是給擼出來,樓主寫成了一個外掛,方便大
微信小程式之自定義select下拉選項框元件
知識點:元件,animation,獲取當前點選元素的索引與內容 微信小程式中沒有select下拉選項框,所以只有自定義。自定義的話,可以選擇模板的方式,也可以選擇元件的方式來建立。 這次我選擇了元件,這樣只需引入元件和新增資料,其它的不用管,就能實現多個地方重複使用了。
微信小程式之——自定義分享按鈕(完整版)
1.宣告 onShareAppMessage 函式 onShareAppMessage() { return { title: '彈出分享時顯示的分享標
微信小程式開發---自定義tabBar
最近開發微信小程式,公司要求做一個類似閒魚的tabbar,但是網上大多資料的tabbar都會在頁面切換的時候重新渲染,所以我寫了一個不會重新渲染的tabbar,有需要的直接拿走不謝。https://github.com/SuRuiGit/wxapp-customTabbar
微信小程式之自定義toast例項 —— 微信小程式實戰系列(6)
微信提供了一個toast的api wx.showToast() 本來是比較好的,方便使用,但是這個toast會顯示出圖示,而且不能去除。 假設:我們執行完業務的時候,toast一下,當執行成功的
微信小程式之自定義輪播圖例項 —— 微信小程式實戰系列(3)
輪播圖是大部分應用的一個常用的功能,常用於廣告投放、產品展示、活動展示等等。 漂亮的輪播圖效果可以吸引使用者的點選,達到推廣產品的作用。 廢話少說,下面開始動手。 業務需求: 5個圖片輪番播放,
【微信小程式】自定義模態框例項
原文連結:https://mp.weixin.qq.com/s/23wPVFUGY-lsTiQBtUdhXA1概述由於官方API提供的顯示模態彈窗,只能簡單地顯示文字內容,不能對對話方塊內容進行自定義,欠缺靈活性,所以自己從模態彈窗的原理角度來實現了自定義的模態對話方塊。今天
微信小程式之自定義抽屜選單(從下拉出)例項 —— 微信小程式實戰系列(7)
微信提供了動畫api,就是下面這個 通過使用這個建立動畫的api,可以做出很多特效出來 下面介紹一個抽屜選單的案例 實現程式碼: wxml: <!--button--> &l
【微信小程式】自定義元件
微信小程式中的元件前言之前做小程式開發的時候,對於開發來說比較頭疼的莫過於自定義元件了,當時官方對這方面的文件也只是寥寥幾句,一筆帶過而已,所以寫起來真的是非常非常痛苦!!好在微信小程式的庫從 1.6.3 開始,官方對於自定義元件這一塊有了比較大的變動,首先比較明顯的感覺就是文件比以前全多了,有木有!(小程式
微信小程式(三)自定義分享按鈕和原生分享&區分不同按鈕的分享&帶引數分享和獲取
官方的分享 點選右上角的三個點 /** * 使用者點選右上角分享 */ onShareAppMessage: function(ops) { wx.showShareMenu({
微信小程式 —— 解決自定義彈窗出現後,蒙層下的頁面仍可以滾動的問題
在微信小程式開發中,會碰到自定義彈窗出現後,蒙層下面的頁面仍可以滾動的問題。 例如: 解決方法: 1. 先點擊出現蒙層時,頁面的最外層view:height:100vh (靈活設定,
微信小程式佈局 自定義彈出層
很常見的就就是點選篩選 出現篩選條件的場景 效果 WXML <!--index.wxml--> <button bindtap='showModal'>點這裡</
微信小程式之自定義輪播圖swiper dots樣式
在做微信小程式開發過程中,常用的元件就是swiper元件,通過該控制元件來實現輪播圖效果,但是swiper元件的指示點預設是小黑點,一般情況下,我們可以根據API文件中swiper的相關屬性方法進行顏色修改,如下: indicator-color='#dbdb
【微信小程式】自定義抽屜式選單(底部,從下向上拉出)
微信提供了動畫api,就是下面這個通過使用這個建立動畫的api,可以做出很多特效出來下面介紹一個抽屜選單的案例實現程式碼:wxml:<!--button--> <view class="btn" bindtap="powerDrawer" data-stat
【微信小程式】微信小程式掃描自定義二維碼到指定頁面的坑
重點 測試版本不需要釋出也可以進行測試 測試階段不釋出,只能掃描測試連結中的地址中的二維碼,其他的就算符合規範也不可以 如果是要動態匹配引數,那麼動態部分必定是/後面的字串 如果是要動態匹配引數,那
微信小程式 帶可拖動進度條和時間顯示的音訊播放器
眾所周知,微信官方自帶的音訊播放器是沒有進度條的,為了實現有進度條,並且拖動,只能自己寫一個了; 下面是演示圖 ①頁面載入完成後,能夠直接顯示音訊的時長 ②播放時,進度條變化,播放時間變化,拖動進度條可以跳轉到改進度播放 話不多說,直接上程式碼 首先是微信官
微信小程式:帶open-type和自定義背景的按鈕
小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java實時BUG監控。真的是一個很好用的bug監控費服務,眾多大佬公司都在使用。 在小程式開發過程中,經常遇到一種情況:頁面中的一個按鈕需要帶有open-type,同時還要靈活地設定這個
微信小程式:音樂播放器的使用1
首先第一點。這個音樂播放其實也沒什麼大的問題,但是有些時候可能要根據pm來開發的時候回有點噁心,比如我就遇到了。勉強提交了一個版本後,開始好好的梳理下這個audio的一開始的時候,pm跟我說我肯定想到的是使用backgroundaudio來播放音樂的,畢竟光是audio元件就