微信小程序:音頻播放器

最近呢席覆,用小程序做了一款音頻播放器直砂,自我感覺還闊以菌仁,接下來呢,給大家分享一下静暂,大家先來看看效果圖哦~

播放器.gif

這里呢济丘,我選擇的是 wx.createInnerAudioContext 這個方法,大家可以結(jié)合文檔來看這篇文章哦~

wxml

<view class="audios">
  <view class="play_pause_btn" bindtap="stratPlay">
    <image class="btn" wx:if="{{!isplay}}" src="../../assets/image/correctAudios/play.png"></image>
    <image class="btn" wx:else src="../../assets/image/correctAudios/pause.png"></image>
  </view>
  <view class="play_process">
    <view style="font-size: 22rpx;font-family:Helvetica;">{{startTime}}</view>
      <view class="slider_out" style="width: {{selfSliderWidth}}">
        <slider data-offset="{{processLen}}" style="width: 95%;margin-left: 10rpx;" bindchange='sliderChange' bindtouchstart="handleSliderMoveStart" bindtouchend="handleSliderMoveEnd" value="{{processLen}}" min="0" max="100" step="1" activeColor='#000' block-size="12" backgroundColor="rgba(199,199,204,1)"/>
      </view>
    <view style="font-size: 22rpx;font-family:Helvetica;">{{endTime}}</view>
  </view>
</view>

js: 1洽蛀、初始化狀態(tài)

data() {
    url: '',
    duration: '',
    myAudio: '',
    startTime: '00:00',
    endTime: '00:00',
    isplay: false,
    processLen: 0,
    isMovingSlider: false,
},
onReady(){
     this.data.myAudio = wx.createInnerAudioContext();
      this.data.myAudio.src = this.data.url;
      wx.setInnerAudioOption({  
        obeyMuteSwitch: false  
      })
      this.data.endTime = setTimes(this.data.duration);
      this.data.myAudio.seek(0);
      this.setData({
        isplay: false,
        startTime: '00:00',
        endTime: this.data.endTime,
        processLen: 0,
     })
}

js: 2摹迷、點擊播放、暫停郊供、以及播放的進度

this.data.isplay = !this.data.isplay;
if(this.data.isplay) {
      this.data.myAudio.play();
      setTimeout(() => {
           this.data.myAudio.paused;
      }, 200)
 } else { 
      this.data.myAudio.pause();
 }

 this.setData({
    isplay: this.data.isplay
 })

 // 播放中...
 this.data.myAudio.onTimeUpdate(() => {
       if(!this.data.isMovingSlider) {
           let per = (this.data.myAudio.currentTime this.data.myAudio.duration) * 100;
           this.setData({
              startTime: setTimes(this.data.myAudio.currentTime),
              processLen: per
            })
        }
  })
        
  // 播放結(jié)束
  this.data.myAudio.onEnded(() => {
     this.setData({
         isplay: false,
         startTime: "00:00",
         processLen: 0
      })
   })
        
   // 播放出錯
    this.data.myAudio.onError((err) => {
         console.log('audio error => ', err)
    })

js: 3峡碉、進度條的拖拽

 sliderChange(e) {
      let long = (e.detail.value * this.data.duration) / 100;
      this.data.myAudio.seek(long);
          this.data.myAudio.pause();
          setTimeout(() => {
             this.data.myAudio.play();
          })
     }, 500)

     this.setData({
         isplay: true,
         startTime: setTimes(long)
     })
 }
// 解決onTimeUpdate事件觸發(fā)slider控件更新”和“手動拖動觸發(fā)slider更新”沖突的問題
 handleSliderMoveStart() {
    this.setData({
        isMovingSlider: true
    });
 },

 handleSliderMoveEnd() {
    this.setData({
        isMovingSlider: false
    });
 }

js: 4、銷毀音頻實例

onUnload() {
    this.data.myAudio.destory()
}

wxss

.audios {
    display: flex;
    align-items: center;
    height: 88rpx;
    padding: 0 40rpx;
    margin: 0 auto;
    box-sizing: border-box;
    background:rgba(255,255,255,1);
    box-shadow: 2rpx 2rpx 12rpx 0rpx rgba(199,199,204,0.6);
    border-radius: 20rpx;
}
.audios .play_pause_btn {
    width: 40rpx;
    height: 44rpx;
    margin-right: 40rpx;
}
.play_pause_btn .btn{
    width: 100%;
    height: 100%;
}
.audios .play_process {
    flex: 1;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

代碼中所用到的setTimes方法

const setTimes = (value) => {
    let theTime = parseInt(value);//秒
    let theTime1 = 0;//分
    if(theTime > 60){
        theTime1 = parseInt(theTime / 60);
        theTime = parseInt(theTime % 60);
        if(theTime1 > 60) {  
            theTime1 = parseInt(theTime1 % 60);  
        }    
    }
    let theTime_y = parseInt(theTime);
    if(theTime_y < 10) {
        theTime_y = '0' + theTime_y   
    }
    let results = "" + theTime_y;
    if(theTime1 > 0 || theTime1 == 0) { 
        let theTime1_y = parseInt(theTime1);
        if(theTime1_y < 10){
            theTime1_y = '0' + theTime1_y;
        } 
        results = "" + theTime1_y + ":" + results;  
    }  
    return results;
}

嗯~驮审,到這就寫的差不多了鲫寄,希望能夠幫助大家,如若有地方不正確疯淫,還希望在評論區(qū)多多指出地来,或者私信小編哦,三克油??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峡竣,一起剝皮案震驚了整個濱河市靠抑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌适掰,老刑警劉巖颂碧,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異类浪,居然都是意外死亡载城,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門费就,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诉瓦,“玉大人,你說我怎么就攤上這事力细〔窃瑁” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵眠蚂,是天一觀的道長煞聪。 經(jīng)常有香客問我,道長逝慧,這世上最難降的妖魔是什么昔脯? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任啄糙,我火速辦了婚禮,結(jié)果婚禮上云稚,老公的妹妹穿的比我還像新娘隧饼。我一直安慰自己,他們只是感情好静陈,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布燕雁。 她就那樣靜靜地躺著,像睡著了一般窿给。 火紅的嫁衣襯著肌膚如雪贵白。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天崩泡,我揣著相機與錄音禁荒,去河邊找鬼。 笑死角撞,一個胖子當(dāng)著我的面吹牛呛伴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谒所,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼热康,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了劣领?” 一聲冷哼從身側(cè)響起姐军,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尖淘,沒想到半個月后奕锌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡村生,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年惊暴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趁桃。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡辽话,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卫病,到底是詐尸還是另有隱情油啤,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布蟀苛,位于F島的核電站益咬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屹逛。R本人自食惡果不足惜础废,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罕模。 院中可真熱鬧评腺,春花似錦、人聲如沸淑掌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抛腕。三九已至芋绸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間担敌,已是汗流浹背摔敛。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留全封,地道東北人马昙。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像刹悴,于是被迫代替她去往敵國和親行楞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354