中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序中如何自定義一個音樂進度條

發布時間:2022-04-18 17:24:52 來源:億速云 閱讀:499 作者:zzz 欄目:開發技術

這篇文章主要介紹了微信小程序中如何自定義一個音樂進度條的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇微信小程序中如何自定義一個音樂進度條文章都會有所收獲,下面我們一起來看看吧。

需求:顯示音樂播放按鈕、可手動拖拽進度條;頁面中含多個音樂,播放當前音樂時暫停其他音樂播放。

小程序自帶標簽 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
 });

關于“微信小程序中如何自定義一個音樂進度條”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“微信小程序中如何自定義一個音樂進度條”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嵩明县| 来宾市| 元江| 昭平县| 冕宁县| 田林县| 桃江县| 江都市| 安达市| 荃湾区| 常熟市| 衡水市| 庆安县| 博客| 临泉县| 葫芦岛市| 长垣县| 嵊州市| 方正县| 石城县| 东乡县| 平舆县| 万宁市| 石泉县| 韶山市| 兰坪| 遂川县| 舞钢市| 信阳市| 峨眉山市| 灵山县| 襄樊市| 蛟河市| 沁源县| 陵水| 武隆县| 小金县| 台北县| 南充市| 蒙山县| 杭锦旗|