91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

發布時間:2021-06-16 15:51:22 來源:億速云 閱讀:264 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關微信小程序中怎么自定義一個音樂進度條,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

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

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

柘城县| 黑山县| 台南市| 黑龙江省| 尚义县| 麟游县| 汶川县| 双鸭山市| 尉氏县| 鄂温| 海林市| 佛山市| 荃湾区| 任丘市| 松江区| 湘潭市| 澄江县| 怀集县| 万州区| 会宁县| 青州市| 海阳市| 南靖县| 余江县| 吴桥县| 陆良县| 丹江口市| 东莞市| 岱山县| 阳曲县| 仁布县| 抚州市| 宁陕县| 福州市| 温宿县| 兰考县| 绵阳市| 九台市| 济宁市| 囊谦县| 曲周县|