iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Modern Web

別再說我不會框架,網頁 Vue 起來!系列 第 18

[番外] 來個音樂撥放器 Play! (續)

  • 分享至 

  • xImage
  •  

Data

data 起手式,記得要回傳物件

data () {
    return {}
}

data 中大概會有這些內容

  data () {
    return {
      songList : [
        {
          name: 'Oceans',
          singer:'Seafret ',
          src: require('./assets/xxxx.mp3')
        },
         {
          name: 'No song without you',
          singer:'HONNE',
          src: require('./assets/xxxx.mp3')
        },
        {
          name: '我是第三首',
          singer:'我是第三首',
          src: require('./assets/xxxx.mp3')
        },

      ],
      index: 0, // 目前撥放第幾首
      current: {}, // 目前撥放內容
      isPlaying: false, // 目前是否正在撥放
      isSingleLoop: false, // * 是否單首循環
      isRandomPlay: false, // * 是否隨機撥放
      player: new Audio() 
    }
  },

參考 APP 音樂撥放器,還可以增加單首循環或是隨機撥放的選項


Methods

play

用來控制撥放/暫停

ex:

play () {
    this.isPlaying? this.player.pause(): this.player.play();
    this.isPlaying = !this.isPlaying;
}
<button class="btn" @click="play">{{isPlaying? '暫停': '播放'}}</button>

changeSong

切換上下首,傳入+1-1
ex:

 changeSong (value) {
    this.index = this.index + value;
    this.checkValidIndex();
    this.current = this.songList[this.index];
    this.player.src = this.current.src;
},
<button class="btn" @click="changeSong(-1)">上一首</button>

其他

在變更 index 後,要記得檢查 index 是否有效

ex:

if (this.index > this.songList.length -1) {
    this.index = 0;
}
if (this.index < 0) {
    this.index = this.songList.length -1;
}

監聽音樂 ended 事件

ex: 播完時,自動撥放下一首

this.player.addEventListener('ended', function () {
    this.index++;
    if (this.index > this.songList.length - 1) {
      this.index = 0;
    }

    this.current = this.songList[this.index];
    this.play(this.current);
}.bind(this));

每日一句:
有禮拜天晚上不憂鬱的辦法嗎 /images/emoticon/emoticon02.gif


上一篇
[番外] 來個音樂撥放器 Play! (序)
下一篇
[Part 8 ] Vue.js 的精隨- 自訂事件
系列文
別再說我不會框架,網頁 Vue 起來!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言