欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序自定義音樂進度條的實例代碼

 更新時間:2018年08月28日 14:23:18   作者:vonvon_chris  
最近遇到這樣的需求:顯示音樂播放按鈕、可手動拖拽進度條;頁面中含多個音樂,播放當前音樂時暫停其他音樂播放。 這篇文章主要介紹了微信小程序自定義音樂進度條的實例代碼,需要的朋友可以參考下

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

小程序自帶標簽 audio

小程序自帶的audio標簽含固定的樣式,且有最小尺寸。目前項目也不含name和author字段,所以放棄audio標簽。

實現(xiàn)效果圖

這里寫圖片描述

初始化音樂數(shù)據(jù)

<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 播放按鈕觸發(fā)事件 -->

src: _this.data.questionObj.audio,
currentProcess: '--:--',//顯示 將currentProcessNum處理成時間形式展示
currentProcessNum: 0,//賦值
totalProcess: '--:--',
totalProcessNum: 1,
seek: -1,
imgUrl: '../../images/play.png',
canSlider: false //是否可以滑動,防止加載音樂時 用戶滑動進度條

點擊播放按鈕觸發(fā)事件

說明:

•因頁面中音樂數(shù)量較多,所以只有當用戶點擊播放,再去加載audio文件。

•wx.getBackgroundAudioManager()對象,同一時間只會播放一個audio文件。當重新賦值src時,會切換文件。

•利用onTimeUpdate方法實時更新播放進度。

•onEnded方法處理audio播放完畢后的數(shù)據(jù)重新初始化事件。

•變量clickPlayAudioFunctionIsRuning用來防止用戶連續(xù)點擊按鈕。

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('轉換至播放狀態(tài)')
  //切換所有播放按鈕為暫停狀態(tài)
  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('轉換至暫停狀態(tài)')
  _obj[audioId].imgUrl = '../../images/play.png'
  wx.pauseBackgroundAudio();
  backgroundAudioManager.pause();
 }
 _this.setData({
  audioListObj: _obj,
  clickPlayAudioFunctionIsRuning: false
 })

滑動進度條觸發(fā)事件

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
  })

開始滑動觸發(fā)事件

this.setData({
  isMovingSlider: true
 });

結束滑動觸發(fā)事件

 this.setData({
  isMovingSlider: false
 });

總結

以上所述是小編給大家介紹的微信小程序自定義音樂進度條的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • webpack自動打包功能實現(xiàn)

    webpack自動打包功能實現(xiàn)

    webpack是前端項目構建工具打包工具,本文通過實例代碼給大家介紹webpack自動打包功能實現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • JS如何獲取對象鍵值對中key值的方法

    JS如何獲取對象鍵值對中key值的方法

    這篇文章主要介紹了JS如何獲取對象鍵值對中key值的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • JavaScript實現(xiàn)列出數(shù)組中最長的連續(xù)數(shù)

    JavaScript實現(xiàn)列出數(shù)組中最長的連續(xù)數(shù)

    這篇文章主要介紹了JavaScript實現(xiàn)列出數(shù)組中最長的連續(xù)數(shù)的方法及使用,需要的朋友可以參考下
    2014-12-12
  • javascript中alert()與console.log()的區(qū)別

    javascript中alert()與console.log()的區(qū)別

    我們在做js調試的時候使用 alert 可以顯示信息,調試程序,alert 彈出窗口會中斷程序, 如果要在循環(huán)中顯示信息,手點擊關閉窗口都累死。而且 alert 顯示對象永遠顯示為[object ]。 自己寫的 log 雖然可以顯示一些 object 信息,但很多功能支持都沒有 console 好
    2015-08-08
  • JavaScript 閉包深入理解(closure)

    JavaScript 閉包深入理解(closure)

    最近在網(wǎng)上查閱了不少Javascript閉包(closure)相關的資料,寫的大多是非常的學術和專業(yè)。對于初學者來說別說理解閉包了,就連文字敘述都很難看懂。撰寫此文的目的就是用最通俗的文字揭開Javascript閉包的真實面目。
    2009-05-05
  • 客戶端 使用XML DOM加載json數(shù)據(jù)的方法

    客戶端 使用XML DOM加載json數(shù)據(jù)的方法

    我們取出數(shù)據(jù)后可以以json的形式傳到前端處理,也可以以Xml Dom的形式傳到前端進行處理。下邊例子是利用Jquery處理XML Dom的例子。
    2010-09-09
  • node.js Web應用框架Express入門指南

    node.js Web應用框架Express入門指南

    這篇文章主要介紹了node.js Web應用框架Express入門指南,從安裝到各種技術的應用,都進行了講解,是一篇不錯的Express入門教程,需要的朋友可以參考下
    2014-05-05
  • js實現(xiàn)文件上傳表單域美化特效

    js實現(xiàn)文件上傳表單域美化特效

    本文為大家分享的是一款效果非常酷的文件上傳表單域美化特效。有7種不同的美化文件上傳域的效果,很時尚,感興趣的小伙伴們可以參考一下
    2015-11-11
  • 初步了解javascript面向對象

    初步了解javascript面向對象

    面向對象的語言有一個標志,即擁有類的概念,抽象實例對象的公共屬性與方法,基于類可以創(chuàng)建任意多個實例對象,一般具有封裝、繼承、多態(tài)的特性!但JS中對象與純面向對象語言中的對象是不同的,ECMA標準定義JS中對象:無序屬性的集合,其屬性可以包含基本值、對象或函數(shù)
    2015-11-11
  • 微信小程序點擊生成朋友圈分享圖(遇到的坑)

    微信小程序點擊生成朋友圈分享圖(遇到的坑)

    這篇文章主要介紹了微信小程序 點擊生成朋友圈分享圖,本文給大家分享小編在實現(xiàn)此功能時遇到的各種坑,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論