亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

發布時間: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

西平县| 闻喜县| 黄冈市| 普格县| 甘洛县| 湖南省| 老河口市| 泰安市| 奉化市| 杭锦旗| 历史| 商洛市| 临桂县| 行唐县| 博兴县| 兰坪| 中牟县| 密云县| 西平县| 麻栗坡县| 靖江市| 辰溪县| 方山县| 临泉县| 武陟县| 施秉县| 香格里拉县| 大安市| 灵台县| 定西市| 荔浦县| 汉寿县| 金寨县| 营口市| 安康市| 辰溪县| 阿城市| 庆城县| 黄浦区| 太白县| 鄱阳县|