Å bygge programmer med Vue.js er enkelt, morsomt og morsomt. Du kan bygge en fungerende app med minimal innsats. For å bevise at i dag vil jeg vise deg hvor lett det er å bygge din egen fullverdige musikkspiller. For å gjøre ting enda enklere, bruker vi Vuetify.js, et Vue.js-drevet brukergrensesnitt, som vil øke hastigheten på brukergrensesnittkonstruksjonen. Jeg kan nesten føle din utålmodighet, så la oss komme i gang.
Du kan finne full kildekoden i GitHub repo. Og her er den arbeidende demoen. For å følge denne opplæringen bør du være kjent med Vue-komponenter, Vue-enkeltfilkomponenter og ES2015-syntaks.
Hver opprettelse starter med en idé og i det minste noen grunnleggende planlegging. Så først må vi bestemme hva vi vil bygge og hvilken funksjonalitet vi vil implementere. Det sies at et bilde er verdt tusen ord, så la oss starte med en enkel skiss av musikkspilleren.
Jeg laget denne wireframe slik at du kan få en generell oppfatning av brukergrensesnittet vi vil bygge. Det neste trinnet er å beskrive funksjonaliteten vi skal implementere.
Som john johnson sier:
Først løser du problemet. Skriv deretter koden.
Vi bruker det som en kilde til visdom, og vi planlegger appen før vi begynner å kode det.
Vue.js er en komponentbasert rammeverk. Så vi trenger først å dele appen i individuelle komponenter (fem i vårt tilfelle, som vist på skissen ovenfor), og å skissere funksjonene og funksjonaliteten for hver av dem.
Denne komponenten vil inneholde følgende deler:
Denne komponenten vil vise grunnleggende informasjon om det spilt sporet:
Denne komponenten inneholder to barer, som inkluderer alle kontrollene som er nødvendige for å manipulere lydsporene i spillerens spilleliste.
Denne komponenten vil inneholde sporets spilleliste med følgende funksjonalitet:
Denne komponenten vil tilby søkefunksjonalitet i tilfeller der vi ønsker å finne og spille bestemte spor (er).
Selvfølgelig kan oversikten ovenfor ikke dekke alle detaljer og nyanser, og dette er helt greit. For nå er det nok for oss å få et samlet bilde av sluttproduktet. Vi håndterer alle detaljer og eventuelle utfordringer under byggeprosessen.
Så la oss komme inn i den morsomme delen og skrive noen kode!
Vuetifys hurtige startside tilbyr mange muligheter for å komme i gang. Vi bruker en av de forhåndsdefinerte Vue CLI-malene, kalt Webpack Simple. Kjør følgende kommandoer i katalogen du vil bruke til dette prosjektet:
Først installerer du Vue CLI:
$ npm installere -g vue-cli
Deretter lager du appen:
$ vue init vuetifyjs / webpack-enkel vue-musikkspiller
Deretter går du til appens katalog og installerer alle avhengigheter:
$ cd vue-musikkspiller $ npm installere
Vi bruker Howler.js (et JavaScript-lydbibliotek) til å håndtere lyddelene til musikkspilleren. Så vi må også inkludere det i prosjektet. Kjør følgende kommando:
$ npm installere - lagre howler
Og til slutt, kjøre appen:
$ npm kjøre dev
Appen vil åpne på localhost: 8080
i standard nettleseren din. Du bør se et enkelt Vuetify-appskjelett.
For å tilpasse det til våre behov, må vi rydde opp malen og justere den litt. Gi nytt navn til App.vue fil til Player.vue, åpne den, slett alt inni, og legg til følgende i stedet:
Vi pakker inn vår musikkspiller-app i v-app
komponent, som kreves for at appen skal fungere skikkelig. Vi passerer også mørk
prop, for å bruke Vuetify mørkt tema.
Nå åpner du main.js fil, slett det opprinnelige innholdet, og legg til følgende:
importer Vue fra 'vue' import Vuetify fra 'vuetify' import 'vuetify / dist / vuetify.css' import Player fra './Player.vue' import Howl, Howler fra 'howler' Vue.use (Vuetify) new Vue (el: '#app', gjengi: h => h (spiller))
Åpne også index.html fil og endre innholdet i
tag til Vue Music Player.
Nå, i nettleseren din, bør du se en tom mørk side. Og voila. Du er klar til å begynne å lage.
Før du begynner kodingen, er det godt å vite at Vuetify tilbyr kodestykker og autofullføring for de store kodeditorene: VS-kode, Atom og Sublime. For å få utklippene, søk etter utvidelsen i favorittredigeren din (vuetify-vscode
, eller vuetify-atom
, eller vuetify-sublime
).
I src katalog, opprett en ny komponenter mappe. Deretter, i den mappen, opprett PlayerTitleBar.vue fil med følgende innhold:
headset MENYHandle om Vue Music Player
Versjon 1.0.0 OK VUE MUSIC PLAYER fjerne check_box_outline_blank Lukk
Her bruker vi følgende Vuetify-komponenter: verktøylinje, meny, knapp, ikon, liste, dialog og kort.
Vi skiller menyen, navnet og ikonene med
komponent. For å vise eller skjule dialogen, oppretter vi dialog: falsk
dataegenskap. Verdien vil skifte når vi klikker på Handle om menyelement.
Nå, i Player.vue fil, importer inn tittellinjekomponenten, registrer den i komponentobjektet, og legg det til i malen.
// ADD komponenten i malen
Sjekk nå resultatet i nettleseren din. Du bør se følgende:
Vi gjentar disse tre trinnene for de fire andre komponentene. Så når i de neste avsnittene jeg forteller deg å importere, registrere og legge til en komponent i malen, bør du følge samme fremgangsmåte som beskrevet her.
I rotkatalogen, opprett en ny spilleliste mappe og legg til lydfilene du vil spille. Filnavnene må skrives med understreker mellom ordene og a .mp3 forlengelse på slutten, for eksempel, Remember_the_Way.mp3. Nå, lag en lydspor array inni Player.vuedataobjekt:
spilleliste: [title: "Streets of Sant'Ivo", artist: "Ask Again", howl: null, display: true, title: "Remember the Way", artist: "Ask Again" skjerm: true, ...]
Hvert spor har tittel
og kunstner
egenskaper, a hyle
objektet er satt til null
, og a vise
eiendom satt til ekte
.
De vise
Egenskapen vil bli brukt når vi implementerer søkefunksjonen. Nå er det satt til ekte
for alle spor, så alle er synlige.
Howler wraps en lydfil i en hyle
gjenstand. Vi setter hyle
til null
fordi vi vil fylle den dynamisk ved etableringen av Vue-forekomsten. For å gjøre det bruker vi Vue opprettet
livscykluskrok.
opprettet: funksjon () this.playlist.forEach ((spor) => let file = track.title.replace (/ \ s / g, "_") track.howl = new Howl (src: ['. /playlist/$file.mp3 ']))
Dette vil sette en ny Hyle
objekt for hvert spor i spillelisten.
Nå lager du PlayerPlaylistPanel.vue komponent og legg til dette innvendig:
index track.artist - track.title track.howl.duration ()
Først passerer vi staven spilleliste
fra Player.vue fil. Neste, i malen, går vi gjennom hvert spor med v-i
Direktivet og vise sporets indeks, etterfulgt av sporets artist og tittel, og lengden på sporet helt til høyre. Vi bruker også v-vis
bundet til vise
eiendom. Et spor vil kun være synlig hvis vise
er ekte
.
Nå, i Player.vue fil, importerer vi, registrerer og legger til spillelisten i malen. Da binder vi spilleliste
prop til spilleliste
dataegenskap slik:
.
La oss sjekke resultatet i nettleseren:
Det er to problemer her. For det første er numrene på sporene ikke riktige, og for det andre er sporets varighet vist i millisekunder, men vi vil at det skal være på få minutter. Vi løser alle disse problemene ved å opprette et formateringsfilter.
I main.js fil, opprett en tall
filter og a minutter
filter, som vil være globalt tilgjengelig. Neste, i PlayerPlaylistPanel.vue, vi bruker dem slik: index | tall
og track.howl.duration () | minutter
.
Nå, hvis du sjekker appen, bør alt vises riktig.
I Player.vue fil, legg til selectedTrack: null
dataegenskap og bind den til spillelistekomponenten (: SelectedTrack = "selectedTrack"
). Så passerer vi staven i PlayerPlaylistPanel.vue fil (selectedTrack: Object
).
Vi legger også til en klikkhendelselytter til
og opprett deretter selectTrack ()
metode:
metoder: selectTrack (spor) this. $ emit ('selecttrack', spor)
Nå tilbake i Player.vue
, Legg til selecttrack
hendelse til spillelistekomponenten (@ Selecttrack = "selectTrack"
) og opprett selectTrack ()
metode:
selectTrack (spor) this.selectedTrack = track
Nå, hvis du går til spillelisten og klikker på et spor, blir det valgt. Vi kan ikke se det, men vi kan bevise det i Vue DevTools. I det følgende skjermbilde er det andre sporet valgt:
Det neste trinnet er å gjøre markeringen synlig. For å gjøre det, binder vi en klasse som vil fargelegge det valgte sporet i oransje og en annen klasse som vil gjøre enda rader mørkere for å gjøre sporene mer skillebare. Sett følgende etter v-vis
direktiv:
: class = "[valgt: spor === selectedTrack, even: index% 2 == 0]"
Vi legger også til en annen klasse, som viser en rullefelt når listen blir for stor.
Vi legger til de nødvendige klassene på slutten av filen.
Og det er det. Nå er det valgte sporet uthevet i oransje.
Vi legger til dobbeltklikk avspillingsfunksjonen på slutten av neste seksjon.
La oss lage spillerkontrollene nå. Vi starter med play, pause og stoppe knapper.
Opprett PlayerControlsBars.vue komponent og legg til dette innvendig:
Stoppe play_arrow pause
Her bruker vi Vuetify-verktøylinjekomponenten.
Det er tre knapper med registrerte klikkhendelselyttere. La oss lage metodene for dem:
metoder: playTrack (index) this. $ emit ('playtrack', indeks), pauseTrack () this. $ emit ('pausetrack'), stopTrack () this. $ emit ('stoptrack')
Nå, i Player.vue fil, importer, registrer og legg til komponenten i malen. Deretter registrerer du hendelseslytterne (@ Playtrack = "play"
, @ Pausetrack = "pause"
, @ Stoptrack = "stopp"
).
Deretter lager du indeks: 0
dataegenskap, som vil holde indeksen for gjeldende spor. Deretter oppretter du en beregning currentTrack ()
:
beregnes: currentTrack () returner denne spillelisten [this.index]
Og nå kan vi begynne å lage spille
, pause
, og Stoppe
metoder. Vi starter med spille()
metode, men før det må vi lage spiller: false
dataegenskap, som vil indikere om sporet spiller eller ikke. Legg til følgende kode for spille()
metode:
play (index) la selectedTrackIndex = this.playlist.findIndex (spor => spor === this.selectedTrack) hvis (typeof index === 'tall') index = index annet hvis (this.selectedTrack) hvis (this.selectedTrack! = this.currentTrack) this.stop () index = selectedTrackIndex annet index = this.index lar track = this.playlist [index] .howl hvis (track.playing ()) annet track.play () this.selectedTrack = this.playlist [index] this.playing = true this.index = index
Metoden tar en indeks som parameter, som spesifiserer sporet som skal spilles. Først får vi indeksen til det valgte sporet. Deretter foretar vi noen sjekker for å bestemme verdien av index
. Hvis en indeks er gitt som et argument, og det er et tall, så bruker vi det. Hvis et spor er valgt, bruker vi indeksen til det valgte sporet. Hvis det valgte sporet er forskjellig fra det nåværende, bruker vi Stoppe()
metode for å stoppe den nåværende. Til slutt, hvis ikke et indeksargument er bestått eller et spor er valgt, bruker vi verdien av index
dataegenskap.
Deretter får vi hylen (basert på indeksverdien) for sporet og sjekker om den spiller. Hvis det er, returnerer vi ingenting; Hvis det ikke er det, spiller vi det.
Endelig oppdaterer vi selectedTrack
, spiller
og index
data egenskaper.
La oss nå lage pause()
og Stoppe()
fremgangsmåter.
pause () this.currentTrack.howl.pause () this.playing = false, stop () this.currentTrack.howl.stop () this.playing = false
Her stopper vi eller stopper nåværende spor og oppdaterer spiller
dataegenskap.
La oss også få et spor å begynne å spille på dobbeltklikk.
Legg til @ DblClick = "playTrack ()"
til
i PlayerPlaylistPanel.vue og opprett playTrack ()
metode:
playTrack (indeks) this. $ emit ('playtrack', indeks)
Registrer lytteren @ Playtrack = "play"
i Player.vue fil og voila.
La oss nå legge til forrige og neste knapp.
skip_previous skip_next
Opprett skipTrack ()
metode:
skipTrack (retning) this. $ emit ('skiptrack', retning)
Registrer hendelseslytteren (@ Skiptrack = "skip"
) i Player.vue.
Og skape hopp ()
metode:
hopp over (retning) let index = 0 hvis (retning === "neste") index = this.index + 1 if (index> = this.playlist.length) index = 0 annet indeks = dette. indeks - 1 hvis (indeks < 0) index = this.playlist.length - 1 this.skipTo(index) , skipTo (index) if (this.currentTrack) this.currentTrack.howl.stop() this.play(index)
Vi kontrollerer først om retningen er neste
. I så fall øker vi indeksen med 1. Og hvis indeksen blir større enn den siste indeksen i arrayet, starter vi igjen fra null. Når retningen er prev
, vi reduserer indeksen med 1. Og hvis indeksen er mindre enn null, bruker vi den siste indeksen. På slutten bruker vi index
som et argument for skipTo ()
metode. Den stopper nåværende spor og spiller neste eller forrige.
Slik ser spilleren ut med knappene:
Legg til følgende før alle knappene:
Her bruker vi Vuetify-skyvekomponenten.
Legg til volum: 0,5
dataegenskap, og opprett deretter updateVolume ()
metode:
updateVolume (volum) Howler.volume (volum)
Her bruker vi det globale Howler-objektet til å angi volumet globalt for alle grøfter.
Også, vi må synkronisere det innledende Howler-volumet, som som standard er satt til 1, til volum
eiendom. Hvis du ikke gjør det, vil volumet vise 0,5, men vil først være 1. For å gjøre det, bruker vi opprettet
krok igjen:
opprettet: funksjon () Howler.volume (this.volume)
Vi vil se volumnivået som en prosentdel til høyre for volumregulatoren, så vi legger til dette i malen: this.volume * 100 + '%'
Nå legger vi til et volumikon foran glidebryteren.
volum opp volume_down volume_mute volume_off
Ikonet vil endres i henhold til verdiene til volum
og dempet
eiendommer.
Legg til dempet: falsk
dataegenskap og opprett toggleMute ()
metode:
toggleMute () Howler.mute (! this.muted) this.muted =! this.muted
Vi bruker det globale Howler-objektet igjen for å stille dempet globalt, og vi bytter deretter dempet
verdi.
I skjermbildet nedenfor kan du se hvordan volumkontrollen skal se ut:
Legg til følgende etter alle knappene:
repeat_one repeat_one
Legg til loop: false
eiendom i Player.vue, bind den : Sløyfe = "sløyfe"
og pass prop (sløyfe: boolsk
) i PlayerControlsBars.vue.
La oss nå lage toggleLoop ()
metode:
toggleLoop () this. $ emit ('toggleloop',! this.loop)
Nå tilbake i Player.vue, registrer hendelseslytteren (@ Toggleloop = "toggleLoop"
) og opprett toggleLoop ()
metode:
toggleLoop (verdi) this.loop = value
På dette punktet står vi overfor et lite problem. Når et spor søker slutten, stopper det bare. Spilleren beveger seg ikke til neste spor, og gjentar ikke gjeldende spor. For å fikse det, må vi legge til følgende i opprettet
fungere etter src
eiendom:
onend: () => if (this.loop) this.play (this.index) else this.skip ('next')
Nå, når sløyfe
er på, gjentas gjeldende spor. Hvis den er av, går spilleren videre på neste spor.
Legg til følgende etter gjenta-knappen:
tilfeldig rekkefølge tilfeldig rekkefølge
Legg til shuffle: false
eiendom i Player.vue
, bind den (: Shuffle = "shuffle"
), og pass prop (shuffle: boolsk
) i PlayerControlsBars.vue
.
La oss nå lage toggleShuffle ()
metode;
toggleShuffle () this. $ emit ('toggleshuffle',! this.shuffle)
Nå tilbake i Player.vue, registrer hendelseslytteren (@ Toggleshuffle = "toggleShuffle"
) og opprett toggleShuffle ()
metode:
toggleShuffle (verdi) this.shuffle = value
Legg nå følgende til hopp ()
metode etter indeks = 0
:
lastIndex = this.playlist.length - 1 if (this.shuffle) index = Math.round (Math.random () * lastIndex) mens (index === this.index) index = Math.round (Math.random () * lastIndex) annet hvis (retning === "neste") ...
Slik ser appen din nå:
Først i Player.vue, opprett søk: 0
eiendom. Da må vi se på spiller
eiendom for å oppdatere søket.
se på (spill) (this) , 250) annet clearInterval (updateSeek),
Dette vil oppdatere søkeverdien fire ganger per sekund.
Opprett nå en beregning framgang()
:
fremgang () hvis (denne.strømTrack.howl.duration () === 0) return 0 return denne.seek / this.currentTrack.howl.duration ()
Bind det (: Progress = "fremskritt"
) i malen.
Nå i PlayerControlsBars.vue, Send meg framgang
rekvisitt (fremdrift: nummer
) og legg til et annet verktøylinje under det vi allerede har opprettet:
Her bruker vi Vuetify-fremgangskomponenten.
Opprett en beregning trackProgress ()
, som vil få sporets fremgang som en prosentandel.
beregnet: trackProgress () return this.progress * 100,
Og nå, opprett updateSeek ()
metode:
updateSeek (event) let el = document.querySelector ("progress-linear__bar"), mousePos = event.offsetX, elWidth = el.clientWidth, prosent = (mousePos / elWidth) * 100 dette. $ emit ('updateseek' percents)
Her får vi fremdriftslinjen elementet, som bruker .fremgang-linear__bar
klasse. Jeg fant dette med nettleser DevTools. Deretter får vi museposisjonen og bredden på linjen. Da får vi museklikkposisjonen som en prosentandel.
Tilbake i Player.vue, legg til og registrer hendelseslytteren (@ Updateseek = "setSeek"
) og opprett setSeek ()
metode:
setSeek (percents) let track = this.currentTrack.howl hvis (track.playing ()) track.seek ((track.duration () / 100) * prosent)
Og boom! Du kan bruke musen til å endre posisjonen til det spilt sporet.
Opprett PlayerInfoPanel.vue fil med følgende innhold:
trackInfo.artist - trackInfo.title
trackInfo.seek | minutter / trackInfo.duration | minutter
Her passerer vi en prop trackInfo
, som vi bruker til å fylle sporinformasjonen i komponenten vår.
Nå tilbake i Player.vue, importer, registrer og legg til komponenten i malen.
Deretter oppretter du en beregning getTrackInfo ()
:
getTrackInfo () la artist = this.currentTrack.artist, title = this.currentTrack.title, seek = this.seek, duration = this.currentTrack.howl.duration () retur artist, tittel, søk, varighet
Deretter bindes det i malen (: TrackInfo = "getTrackInfo"
) og voila. Vi får litt grunnleggende info for det spilt sporet, som du kan se på skjermbildet nedenfor.
Opprett PlayerSearchBar.vue fil med følgende innhold:
Vi lager et tekstfelt og legger til fjernbar
prop for å vise et clearing-ikon når vi skriver noe.
Ved bruk av v-modellen
, vi binder den til search
, som er en tom streng først. Og vi legger til en inngangshendelse lytter.
Vi passerer også spilleliste
prop, som vi bruker i searchPlaylist ()
metode. I denne metoden bruker vi vise
eiendom og slå den av
for hvert spor hvor tittelen eller artisten ikke samsvarer med søkestrengen, og vi beholder den eller snu den på
for alle kamper. Endelig, hvis søkestrengen er tom eller lik null
, Hva skjer når vi fjerner feltet med den klare knappen, vi svinger på
de vise
for alle sporene.
Nå tilbake i Player.vue, importer, registrer og legg til komponenten i malen.
Bind inn spillelisten (: Spille = "spilleliste"
) og sjekk funksjonaliteten. Slik ser det ut i handling:
Som du kan se, med et klart mål og riktig planlegging, kan det være veldig enkelt og morsomt å bygge en Vue / Vuetify-app. Du har nå en arbeidsmusikkspiller som du kan bruke under avslapnings- eller kodetiden. Selvfølgelig er det alltid plass til videre forbedringer og tillegg, så her er noen ideer du kan prøve å gjøre spilleren enda mer funksjonsrik:
I denne opplæringen så vi hvor lett og morsomt det kan være å bygge en app med Vue.js, og spesielt Vuetify.js. Jeg håper du likte å bygge denne spilleren så mye som jeg gjorde. Jeg vil gjerne se din egen forbedrede versjon av spilleren. Så hvis du lager en, bare slipp en demo link i kommentarene!