Creare app con Vue.js è facile, divertente e divertente. Puoi costruire un'app funzionante con il minimo sforzo. Per dimostrarlo, oggi ti mostrerò quanto è facile costruire il tuo lettore musicale completo. Per rendere le cose ancora più semplici, utilizzeremo Vuetify.js, una libreria UI potenziata di Vue.js, che velocizzerà la costruzione dell'interfaccia utente. Posso quasi sentire la tua impazienza, quindi cominciamo.
Puoi trovare il codice sorgente completo nel repository GitHub. Ed ecco la demo funzionante. Per seguire questo tutorial, è necessario avere familiarità con i componenti Vue, i componenti Vue single file e la sintassi ES2015.
Ogni creazione inizia con un'idea e almeno con una pianificazione di base. Quindi prima dobbiamo decidere cosa vogliamo costruire e quali funzionalità vogliamo implementare. Si dice che un'immagine vale più di mille parole, quindi iniziamo con un semplice schizzo del lettore musicale.
Ho realizzato questo wireframe in modo da poter ottenere una nozione generale dell'interfaccia utente che vogliamo costruire. Il prossimo passo è descrivere la funzionalità che intendiamo implementare.
Come dice John Johnson:
Innanzitutto, risolvi il problema. Quindi, scrivi il codice.
Lo useremo come fonte di saggezza e pianificheremo l'app prima di iniziare a codificarla.
Vue.js è un framework basato su componenti. Quindi, per prima cosa dobbiamo dividere l'app in singoli componenti (cinque nel nostro caso, come mostrato nello schizzo sopra) e per delineare le caratteristiche e le funzionalità di ciascuno di essi.
Questo componente conterrà le seguenti parti:
Questo componente mostrerà le informazioni di base sulla traccia attualmente riprodotta:
Questo componente conterrà due barre, che includeranno tutti i controlli necessari per manipolare le tracce audio nella playlist del lettore.
Questo componente conterrà la playlist dei brani con la seguente funzionalità:
Questo componente offrirà funzionalità di ricerca nei casi in cui vogliamo trovare e riprodurre tracce particolari.
Naturalmente, lo schema sopra non può coprire tutti i dettagli e le sfumature, e questo è perfettamente a posto. Per ora, è sufficiente per noi ottenere una visione d'insieme del prodotto finale. Gestiremo tutti i dettagli e le eventuali sfide durante il processo di costruzione.
Quindi entriamo nella parte divertente e scriviamo del codice!
La pagina di avvio rapido di Vuetify offre molte opzioni per iniziare. Useremo uno dei modelli Vue CLI predefiniti chiamato Webpack Simple. Eseguire i seguenti comandi nella directory che si desidera utilizzare per questo progetto:
Innanzitutto, installa Vue CLI:
$ npm install -g vue-cli
Quindi, crea l'app:
$ vue init vuetifyjs / webpack-semplice vue-music-player
Successivamente, vai alla directory dell'app e installa tutte le dipendenze:
$ cd vue-music player $ npm install
Useremo Howler.js (una libreria audio JavaScript) per gestire le parti audio del lettore musicale. Quindi dobbiamo includerlo anche nel progetto. Esegui il seguente comando:
$ npm install --save howler
Infine, esegui l'app:
$ npm esegui dev
L'app si aprirà localhost: 8080
nel tuo browser predefinito. Dovresti vedere un semplice scheletro di app di Vuetify.
Per adattarlo alle nostre esigenze, dobbiamo pulire il modello e modificarlo un po '. Rinominare il App.vue file su Player.vue, aprilo, cancella tutto all'interno e aggiungi invece quanto segue:
Abbiamo avvolto la nostra app di musica nel v-app
componente, che è necessario affinché l'app funzioni correttamente. Passiamo anche il buio
prop, per applicare il tema scuro di Vuetify.
Ora apri il main.js file, eliminare il contenuto originale e aggiungere quanto segue:
importa Vue da 'vue' importa Vuetify da 'vuetify' importa 'vuetify / dist / vuetify.css' importa Player da './Player.vue' importa Howl, Howler da 'howler' Vue.use (Vuetify) new Vue (el: '#app', render: h => h (Player))
Inoltre, apri il index.html file e modificare il contenuto del
tag a Vue Music Player.
Ora, nel tuo browser, dovresti vedere una pagina scura vuota. E voilà. Sei pronto per iniziare a creare.
Prima di iniziare la codifica, è bene sapere che Vuetify offre snippet di codice e completamento automatico per i principali editor di codice: VS Code, Atom e Sublime. Per ottenere i frammenti, cerca l'estensione nel tuo editor preferito (vuetify-vscode
, o vuetify atomo
, o vuetify-sublime
).
Nel src directory, creane una nuova componenti cartella. Quindi, in quella cartella, crea il PlayerTitleBar.vue file con il seguente contenuto:
cuffia MENUDi Vue Music Player
Versione 1.0.0 ok VUE MUSIC PLAYER rimuovere check_box_outline_blank vicino
Qui, utilizziamo i seguenti componenti di Vuetify: barra degli strumenti, menu, pulsante, icona, elenco, finestra di dialogo e scheda.
Separiamo il menu, il nome e le icone con
componente. Per mostrare o nascondere la finestra di dialogo, creiamo il dialog: false
proprietà dei dati. Il suo valore si alternerà quando clicchiamo su Di elemento del menu.
Ora, nel Player.vue file, importa il componente della barra del titolo, registralo nell'oggetto componenti e aggiungilo nel modello.
// AGGIUNGI il componente nel modello
Ora controlla il risultato nel tuo browser. Dovresti vedere quanto segue:
Ripeteremo questi tre passaggi per gli altri quattro componenti. Quindi quando nelle prossime sezioni ti dico di importare, registrare e aggiungere un componente nel modello, dovresti seguire la stessa procedura descritta qui.
Nella directory root, creane una nuova elenco di riproduzione cartella e aggiungere i file audio che si desidera riprodurre. I nomi dei file devono essere scritti con caratteri di sottolineatura tra le parole e a .mp3 estensione alla fine, per esempio, Remember_the_Way.mp3. Ora, crea un array di tracce audio all'interno Player.vueL'oggetto dati di:
playlist: [title: "Streets of Sant'Ivo", artista: "Ask Again", howl: null, display: true, title: "Remember the Way", artista: "Ask Again", howl: null, display: true, ...]
Ogni traccia ha titolo
e artista
proprietà, a ululato
oggetto impostato su nullo
, e a display
proprietà impostata su vero
.
Il display
la proprietà verrà utilizzata quando implementeremo la funzionalità di ricerca. Ora è impostato su vero
per tutte le tracce, quindi sono tutte visibili.
Howler avvolge un file audio in a ululato
oggetto. Prepariamo ululato
a nullo
perché lo compileremo dinamicamente alla creazione dell'istanza Vue. Per farlo, usiamo le Vue creato
gancio del ciclo di vita.
created: function () this.playlist.forEach ((track) => let file = track.title.replace (/ \ s / g, "_") track.howl = new Howl (src: ['. /playlist/$file.mp3 ']))
Questo imposterà un nuovo Ululato
oggetto per ogni traccia nella playlist.
Ora crea il PlayerPlaylistPanel.vue componente e aggiungilo all'interno:
indice track.artist - track.title track.howl.duration ()
In primo luogo, passiamo il puntello elenco di riproduzione
dal Player.vue file. Successivamente, nel modello, passiamo attraverso ogni traccia con il v-for
direttiva e visualizzare l'indice della traccia, seguito dall'artista e titolo della traccia e dalla durata della traccia all'estrema destra. Usiamo anche v-mostra
legato al display
proprietà. Una traccia sarà visibile solo se display
è vero
.
Ora, nel Player.vue file, importiamo, registriamo e aggiungiamo il componente playlist nel modello. Quindi, leghiamo il elenco di riproduzione
prop a elenco di riproduzione
proprietà dati come questa:
.
Controlliamo il risultato nel browser:
Ci sono due problemi qui. Innanzitutto, i numeri delle tracce non sono corretti, e in secondo luogo, la durata della traccia viene mostrata in millisecondi, ma vogliamo che sia in minuti. Ripareremo ognuno di questi problemi creando un filtro di formattazione.
Nel main.js file, creare a numeri
filtro e a minuti
filtro, che sarà accessibile a livello globale. Avanti, in PlayerPlaylistPanel.vue, li usiamo così: indice | numeri
e track.howl.duration () | minuti
.
Ora, se controlli l'app, tutto dovrebbe essere visualizzato correttamente.
Nel Player.vue file, aggiungi il selectedTrack: null
proprietà dati e collegarlo al componente playlist (: SelectedTrack = "selectedTrack"
). Quindi, passiamo il puntello nel PlayerPlaylistPanel.vue file (selectedTrack: Object
).
Aggiungiamo anche un listener di eventi click
e quindi creare il selectTrack ()
metodo:
metodi: selectTrack (track) this. $ emit ('selecttrack', track)
Ora, di nuovo dentro Player.vue
, Aggiungi il selecttrack
evento al componente della playlist (@ Selecttrack = "selectTrack"
) e creare il selectTrack ()
metodo:
selectTrack (track) this.selectedTrack = track
Ora, se vai alla playlist e fai clic su una traccia, sarà selezionato. Non possiamo vederlo, ma possiamo dimostrarlo in Vue DevTools. Nello screenshot seguente, la seconda traccia è selezionata:
Il prossimo passo è rendere visibile la selezione. Per farlo, legheremo una classe che colorerà la traccia selezionata in arancione e un'altra classe che renderà le righe più scure per rendere le tracce più distinguibili. Metti il seguente dopo il v-mostra
direttiva:
: class = "[selected: track === selectedTrack, even: index% 2 == 0]"
Aggiungeremo anche un'altra classe, che mostrerà una barra di scorrimento quando l'elenco diventa troppo grande.
Aggiungiamo le classi necessarie alla fine del file.
E questo è tutto. Ora, la traccia selezionata è evidenziata in arancione.
Aggiungeremo la funzionalità di riproduzione a doppio clic alla fine della sezione successiva.
Creiamo i controlli del giocatore ora. Inizieremo con i pulsanti play, pause e stop.
Crea il PlayerControlsBars.vue componente e aggiungilo all'interno:
Stop play_arrow pausa
Qui, usiamo il componente della barra degli strumenti Vuetify.
Ci sono tre pulsanti con listener di eventi di clic registrati. Creiamo i metodi per loro:
metodi: playTrack (index) this. $ emit ('playtrack', index), pauseTrack () this. $ emit ('pausetrack'), stopTrack () this. $ emit ('stoptrack')
Ora, nel Player.vue file, importa, registra e aggiungi il componente nel modello. Quindi, registra gli ascoltatori di eventi (@ Playtrack = "giocare"
, @ Pausetrack = "pausa"
, @ StopTrack = "stop"
).
Quindi, crea il indice: 0
proprietà dei dati, che manterrà l'indice della traccia corrente. Quindi, crea un calcolo currentTrack ()
:
computato: currentTrack () return this.playlist [this.index]
E ora possiamo iniziare a creare il giocare
, pausa
, e Stop
metodi. Inizieremo con il giocare()
metodo, ma prima dobbiamo creare il giocando: falso
proprietà dei dati, che indica se la traccia è in riproduzione o meno. Aggiungere il seguente codice per il giocare()
metodo:
play (indice) let selectedTrackIndex = this.playlist.findIndex (track => track === this.selectedTrack) if (typeof index === 'number') index = index else if (this.selectedTrack) if (this.selectedTrack! = this.currentTrack) this.stop () index = selectedTrackIndex else index = this.index lascia track = this.playlist [index] .howl if (track.playing ()) return else track.play () this.selectedTrack = this.playlist [index] this.playing = true this.index = index
Il metodo prende un indice come parametro, che specifica la traccia da riprodurre. Innanzitutto, otteniamo l'indice della traccia selezionata. Quindi, effettuiamo alcuni controlli per determinare il valore di indice
. Se un indice è fornito come argomento ed è un numero, allora lo usiamo. Se una traccia è selezionata, usiamo l'indice della traccia selezionata. Se la traccia selezionata è diversa da quella corrente, usiamo il Stop()
metodo per fermare quello corrente. Infine, se non viene passato né un argomento indice né una traccia, usiamo il valore di indice
proprietà dei dati.
Successivamente, otteniamo l'ululato (basato sul valore dell'indice) per la traccia e controlliamo se sta giocando. Se lo è, non restituiamo nulla; se non lo è, lo suoniamo.
Infine, aggiorniamo il selectedTrack
, giocando
e indice
proprietà dei dati.
Creiamo ora il pausa()
e Stop()
metodi.
pause () this.currentTrack.howl.pause () this.playing = false, stop () this.currentTrack.howl.stop () this.playing = false
Qui, interrompiamo o fermiamo la traccia corrente e aggiorniamo il file giocando
proprietà dei dati.
Facciamo anche iniziare una traccia con doppio clic.
Inserisci @ DblClick = "playTrack ()"
a
nel PlayerPlaylistPanel.vue e creare il playTrack ()
metodo:
playTrack (index) this. $ emit ('playtrack', index)
Registra l'ascoltatore @ Playtrack = "giocare"
nel Player.vue file e voilà.
Aggiungiamo ora i pulsanti precedente e successivo.
skip_previous skip_next
Crea il skipTrack ()
metodo:
skipTrack (direction) this. $ emit ('skiptrack', direction)
Registra il listener di eventi (@ Skiptrack = "saltare"
) nel Player.vue.
E creare il Salta()
metodo:
skip (direction) let index = 0 if (direction === "next") index = this.index + 1 if (index> = this.playlist.length) index = 0 else index = this. indice - 1 se (indice < 0) index = this.playlist.length - 1 this.skipTo(index) , skipTo (index) if (this.currentTrack) this.currentTrack.howl.stop() this.play(index)
Per prima cosa controlliamo se la direzione è Il prossimo
. Se è così, incrementiamo l'indice di 1. E se l'indice diventa più grande dell'ultimo indice dell'array, ricominciamo da zero. Quando la direzione è prev
, decrementiamo l'indice di 1. E se l'indice è inferiore a zero, allora usiamo l'ultimo indice. Alla fine, usiamo il indice
come argomento per il saltare a()
metodo. Interrompe la traccia corrente e riproduce il successivo o il precedente.
Ecco come il giocatore guarda con i pulsanti:
Aggiungi quanto segue prima di tutti i pulsanti:
Qui, usiamo il componente del cursore Vuetify.
Aggiungi il volume: 0,5
proprietà dati e quindi creare il file updateVolume ()
metodo:
updateVolume (volume) Howler.volume (volume)
Qui, usiamo l'oggetto globale Howler per impostare il volume globalmente per tutti gli ululati.
Inoltre, dobbiamo sincronizzare il volume di Howler iniziale, che per impostazione predefinita è impostato su 1, su volume
proprietà. Se non lo fai, il volume mostrerà 0.5 ma sarà 1 inizialmente. Per farlo, useremo il creato
aggancia ancora:
creato: function () Howler.volume (this.volume)
Vogliamo vedere il livello del volume come percentuale sulla destra del cursore del volume, quindi aggiungiamo questo nel modello: this.volume * 100 + '%'
Ora, aggiungiamo un'icona del volume prima del cursore.
volume_up volume_down volume_mute volume_off
L'icona cambierà in base ai valori di volume
e smorzato
proprietà.
Aggiungi il disattivato: falso
proprietà dei dati e creare il toggleMute ()
metodo:
toggleMute () Howler.mute (! this.muted) this.muted =! this.muted
Usiamo di nuovo l'oggetto Howler globale per impostare il silenziamento a livello globale, e quindi commutiamo il smorzato
valore.
Nello screenshot qui sotto, puoi vedere come dovrebbe apparire il cursore del volume:
Aggiungi quanto segue dopo tutti i pulsanti:
repeat_one repeat_one
Aggiungi il loop: falso
proprietà in Player.vue, legalo : Loop = "loop"
e passare il prop (loop: booleano
) nel PlayerControlsBars.vue.
Ora, creiamo il toggleLoop ()
metodo:
toggleLoop () this. $ emit ('toggleloop',! this.loop)
Ora, di nuovo dentro Player.vue, registra l'ascoltatore di eventi (@ Toggleloop = "toggleLoop"
) e creare il toggleLoop ()
metodo:
toggleLoop (valore) this.loop = valore
A questo punto, affrontiamo un piccolo problema. Quando una traccia cerca la fine, si ferma. Il giocatore non si sposta sulla traccia successiva, né ripete la traccia corrente. Per risolvere il problema, dobbiamo aggiungere quanto segue al creato
funzione dopo il src
proprietà:
onend: () => if (this.loop) this.play (this.index) else this.skip ('next')
Ora, quando il ciclo continuo
è attivo, la traccia corrente verrà ripetuta. Se è spento, il giocatore si muoverà sulla traccia successiva.
Aggiungi il seguente dopo il pulsante di ripetizione:
rimescolare rimescolare
Aggiungi il shuffle: falso
proprietà in Player.vue
, legarlo (: Riordino = "shuffle"
), e passare il prop (shuffle: booleano
) nel PlayerControlsBars.vue
.
Ora, creiamo il toggleShuffle ()
metodo;
toggleShuffle () this. $ emit ('toggleshuffle',! this.shuffle)
Ora, di nuovo dentro Player.vue, registra l'ascoltatore di eventi (@ Toggleshuffle = "toggleShuffle"
) e creare il toggleShuffle ()
metodo:
toggleShuffle (value) this.shuffle = value
Ora, aggiungi quanto segue al Salta()
metodo dopo indice = 0
:
lastIndex = this.playlist.length - 1 if (this.shuffle) index = Math.round (Math.random () * lastIndex) while (index === this.index) index = Math.round (Math.random () * lastIndex) else if (direction === "next") ...
Ecco come dovrebbe apparire la tua app ora:
Primo Player.vue, creare il cerca: 0
proprietà. Quindi dovremo guardare il giocando
proprietà per aggiornare la ricerca.
watch: playing (playing) this.seek = this.currentTrack.howl.seek () let updateSeek if (playing) updateSeek = setInterval (() => this.seek = this.currentTrack.howl.seek () , 250) else clearInterval (updateSeek),
Ciò aggiornerà il valore di ricerca quattro volte al secondo.
Ora crea un calcolo progresso()
:
progress () if (this.currentTrack.howl.duration () === 0) return 0 return this.seek / this.currentTrack.howl.duration ()
Legalo (: Il progresso = "progresso"
) nel modello.
Ora in PlayerControlsBars.vue, passa il progresso
prop (progresso: numero
) e aggiungi un'altra barra degli strumenti sotto quella che abbiamo già creato:
Qui, usiamo il componente di progresso di Vuetify.
Crea un calcolo trackProgress ()
, che otterrà il progresso della traccia in percentuale.
calcolato: trackProgress () return this.progress * 100,
E ora, crea il updateSeek ()
metodo:
updateSeek (evento) let el = document.querySelector (". progress-linear__bar"), mousePos = event.offsetX, elWidth = el.clientWidth, percents = (mousePos / elWidth) * 100 this. $ emit ('updateseek', percentuali)
Qui, otteniamo l'elemento barra di avanzamento, che utilizza il .il progresso-linear__bar
classe. Ho trovato questo con il browser DevTools. Successivamente, otteniamo la posizione del mouse e la larghezza della barra. Quindi, otteniamo la posizione del clic del mouse come percentuale.
Di nuovo dentro Player.vue, aggiungi e registra l'ascoltatore di eventi (@ Updateseek = "setSeek"
) e creare il setSeek ()
metodo:
setSeek (percentuali) let track = this.currentTrack.howl if (track.playing ()) track.seek ((track.duration () / 100) * percents)
E boom! Puoi usare il mouse per cambiare la posizione della traccia riprodotta.
Crea il PlayerInfoPanel.vue file con il seguente contenuto:
trackInfo.artist - trackInfo.title
trackInfo.seek | minuti / trackInfo.duration | minuti
Qui, passiamo un sostegno trackinfo
, che usiamo per popolare le informazioni sulla traccia nel nostro componente.
Ora, di nuovo dentro Player.vue, importa, registra e aggiungi il componente nel modello.
Quindi, crea un calcolo getTrackInfo ()
:
getTrackInfo () let artist = this.currentTrack.artist, title = this.currentTrack.title, seek = this.seek, duration = this.currentTrack.howl.duration () return artist, title, seek, duration,
Successivamente, lo associamo al modello (: Trackinfo = "getTrackInfo"
) e voilà. Riceviamo alcune informazioni di base per la traccia attualmente riprodotta, come puoi vedere nello screenshot qui sotto.
Crea il PlayerSearchBar.vue file con il seguente contenuto:
Creiamo un campo di testo e aggiungiamo il azzerabile
prop a mostrare un'icona di cancellazione quando scriviamo qualcosa.
Usando v-model
, lo leghiamo al stringa di ricerca
, che è una stringa vuota inizialmente. E aggiungiamo un listener di eventi di input.
Passiamo anche il elenco di riproduzione
prop, che usiamo nel searchPlaylist ()
metodo. In questo metodo, usiamo il display
proprietà e accenderlo via
per ogni traccia in cui il titolo o l'artista non corrisponde alla stringa di ricerca e la manteniamo o la trasformiamo sopra
per tutte le partite. Infine, se la stringa di ricerca è vuota o uguale a nullo
, che succede quando cancelliamo il campo con il pulsante di cancellazione, giriamo sopra
il display
per tutte le tracce.
Ora, di nuovo dentro Player.vue, importa, registra e aggiungi il componente nel modello.
Associare la proprietà della playlist (: Playlist = "playlist"
) e controllare la funzionalità. Ecco come dovrebbe apparire in azione:
Come puoi vedere, con un obiettivo chiaro e una pianificazione adeguata, la creazione di un'app Vue / Vuetify può essere davvero facile e divertente. Ora hai un lettore musicale funzionante che puoi usare durante il tuo relax o tempo di codifica. Naturalmente, c'è sempre spazio per ulteriori miglioramenti e integrazioni, quindi ecco alcune idee che puoi provare per rendere il player ancora più ricco di funzionalità:
In questo tutorial abbiamo visto quanto sia facile e divertente creare un'app con Vue.js e, in particolare, con Vuetify.js. Spero ti sia piaciuto costruire questo giocatore tanto quanto me. Sarò felice di vedere la tua versione migliorata del giocatore. Quindi, se ne crei uno, ti basta rilasciare un link dimostrativo nei commenti!