Beispielcode zur Implementierung eines Musikplayers mit nativem JS

Beispielcode zur Implementierung eines Musikplayers mit nativem JS

Dieser Artikel stellt hauptsächlich den Beispielcode des nativen JS-Musikplayers vor, der wie folgt mit Ihnen geteilt wird:

Rendern

Musik-Player

  • Wiedergabesteuerung
  • Steuerung des Wiedergabefortschrittsbalkens
  • Anzeige und Hervorhebung von Liedtexten
  • Wiedergabemodus-Einstellungen

Klassifizierung der Spielerattribute

Klassifizieren Sie die Attribute und DOM-Elemente des Players entsprechend den Funktionen des Players und speichern Sie die Elemente und Attribute, die dieselbe Funktion implementieren, im selben Objekt, um die Verwaltung und Bedienung zu vereinfachen

const control = { //Player-Steuerung play speichern: document.querySelector('#myplay'),
 ...
  Index: 2, //Die Nummer des aktuell abgespielten Songs ...
}

const audioFile = { //Songdateien und zugehörige Informationsdatei speichern: document.getElementsByTagName('audio')[0],
  aktuelleZeit: 0,
  Dauer: 0,
}

const lyric = { // Konfiguration der Liedtext-Anzeigeleiste ele: null,
  totalLyricRows: 0,
  aktuelle Zeilen: 0,
  Zeilenhöhe: 0,
}

const modeControl = { //Wiedergabemodus mode: ['sequentiell', 'random', 'single'],
  Index: 0
}

const songInfo = { // DOM-Container zum Speichern von Songinformationen Name: document.querySelector('.song-name'),
 ...
}

Wiedergabesteuerung

Funktion: Steuerung der Musikwiedergabe und -pause, des vorherigen Lieds, des nächsten Lieds, der Wiedergabebeendigung und der entsprechenden Symboländerung
Für Audio verwendete API: audio.play() und audio.pause() und Audio-Beendet-Ereignisse

// Musik abspielen und pausieren, vorheriges und nächstes Lied steuern control.play.addEventListener('click',()=>{
  Steuerung.istPlay = !Steuerung.istPlay;
  SpielerHandle();
} );
control.prev.addEventListener('click', vorherigerHandle);
control.next.addEventListener('klicken', nächsterHandle);
audioFile.file.addEventListener('beendet', nächsterHandle);

Funktion SpielerHandle() {
  const spielen = Steuerung.spielen;
  Steuerung.istWiedergeben ? audioFile.file.play() : audioFile.file.pause();
  if (Steuerung.istPlay) {
 //Musik abspielen, Symbol ändern und Animation abspielen play.classList.remove('songStop');
    spielen.classList.add('songStart');
    control.albumCover.classList.add('albumRotate');
    control.albumCover.style.animationPlayState = "läuft";
  } anders {
    //Musik anhalten, Symbol ändern und Animation anhalten …
  }
}


function prevHandle() { // Songs entsprechend dem Wiedergabemodus neu laden const modeIndex = modeControl.index;
  const songListLens = songList.Länge;
  if (modeIndex == 0) {//der Reihe nach abspielen let index = --control.index;
    Index == -1? (Index = SongListLens – 1): Index;
    control.index = index % songListLens;
  } sonst wenn (modeIndex == 1) {//Zufällige Wiedergabe const randomNum = Math.random() * (songListLens - 1);
    Steuerung.index = Math.round(Zufallszahl);
  } sonst wenn (modeIndex == 2) {//einzelnes Lied}
  neu laden(Songliste);
}

Funktion nächsterHandle() {
  const modeIndex = modeControl.index;
  const songListLens = songList.Länge;
  if (modeIndex == 0) {//Der Reihe nach abspielen control.index = ++control.index % songListLens;
  } sonst wenn (modeIndex == 1) {//Zufällige Wiedergabe const randomNum = Math.random() * (songListLens - 1);
    Steuerung.index = Math.round(Zufallszahl);
  } sonst wenn (modeIndex == 2) {//einzelnes Lied}
  neu laden(Songliste);
}

Steuerung des Wiedergabefortschrittsbalkens

Funktion: Aktualisieren Sie den Wiedergabefortschritt in Echtzeit. Klicken Sie auf den Fortschrittsbalken, um den Fortschritt der Songwiedergabe anzupassen.
Für Audio verwendete API: Audio-Timeupdate-Ereignis, audio.currentTime

// Der Wiedergabefortschritt wird in Echtzeit aktualisiert audioFile.file.addEventListener('timeupdate', lyricAndProgressMove);
// Fortschritt durch Ziehen anpassen control.progressDot.addEventListener('click', adjustProgressByDrag);
// Fortschritt durch Klicken anpassen control.progressWrap.addEventListener('click', adjustProgressByClick);

Der Wiedergabefortschritt wird in Echtzeit aktualisiert: durch Ändern der Position oder Breite des entsprechenden DOM-Elements

Funktion lyricAndProgressMove() {
  const audio = Audiodatei.Datei;
  const controlIndex = steuerung.index;
 // Songinformationen initialisieren const songLyricItem = document.getElementsByClassName('song-lyric-item');
  wenn (songLyricItem.length == 0) returnieren;
  Lassen Sie aktuelle Zeit = audioFile.aktuelle Zeit = Math.round(audio.aktuelle Zeit);
  let Dauer = audioFile.duration = Math.round(audio.duration);

  //Bewegung des Fortschrittsbalkens const progressWrapWidth = control.progressWrap.offsetWidth;
  const currentBarPOS = aktuelleZeit / Dauer * 100;
  control.progressBar.style.width = `${currentBarPOS.toFixed(2)}%`;
  const currentDotPOS = Math.round(currentTime / Dauer * progressWrapWidth);
  Steuerung.progressDot.style.left = `${currentDotPOS}px`;

  songInfo.currentTimeSpan.innerText = formatTime(aktuelleZeit);

}

Ziehen, um den Fortschritt anzupassen: Bewegen Sie den Fortschrittsbalken durch Ziehen und aktualisieren Sie gleichzeitig den Fortschritt der Songwiedergabe

Funktion adjustProgressByDrag() {
  const fragBox = control.progressDot;
  const progressWrap = Steuerung.progressWrap
  ziehen(fragBox, progressWrap)
}

Funktion ziehen(fragBox, umbrechen) {
  const wrapWidth = wrap.offsetWidth;
  const wrapLeft = getOffsetLeft(wrap);

  Funktion dragMove(e) {
    lass disX = e.pageX - wrapLeft;
    changeProgressBarPos(disX, WrapWidth)
  }
  fragBox.addEventListener('mousedown', () => { //Ziehvorgang//Klicken, um zur einfachen Bedienung zu vergrößern fragBox.style.width = `14px`; fragBox.style.height = `14px`; fragBox.style.top = `-7px`;
    document.addEventListener('mousemove', dragMove);
    document.addEventListener('mouseup', () => {
      document.removeEventListener('mousemove', dragMove);
      fragBox.style.width = `10px`;fragBox.style.height = `10px`;fragBox.style.top = `-4px`;
    })
  });
}

function changeProgressBarPos(disX, wrapWidth) { //Statusaktualisierung des Fortschrittsbalkens const audio = audioFile.file
  const Dauer = Audiodatei.Dauer
  let dotPos
  let barPos

  wenn (disX < 0) {
    PunktPos = -4
    barPos = 0
    audio.aktuelleZeit = 0
  } sonst wenn (disX > 0 und disX < WrapWidth) {
    dotPos = disX
    Balkenpositionen = 100 * (disX / WrapWidth)
    audio.currentTime = Dauer * (disX / WrapWidth)
  } anders {
    Punktpositionen = WrapWidth - 4
    barPos = 100
    audio.currentTime = Dauer
  }
  Steuerung.progressDot.style.left = `${dotPos}px`
  control.progressBar.style.width = `${barPos}%`
}

Klicken Sie auf den Fortschrittsbalken, um ihn anzupassen: Klicken Sie auf den Fortschrittsbalken und aktualisieren Sie den Fortschritt der Songwiedergabe synchron

Funktion adjustProgressByClick(e) {

  const wrap = control.progressWrap;
  const wrapWidth = wrap.offsetWidth;
  const wrapLeft = getOffsetLeft(wrap);
  const disX = e.pageX - wrapLeft;
  changeProgressBarPos(disX, WrapWidth)
}

Anzeige und Hervorhebung von Liedtexten

Funktion: Aktualisierung der Liedtextanzeige in Echtzeit entsprechend dem Wiedergabefortschritt und Hervorhebung des aktuellen Liedtexts (durch Hinzufügen von Stilen)
Für Audio verwendete API: Audio-Timeupdate-Ereignis, audio.currentTime

// Echtzeitaktualisierung der Liedtextanzeige audioFile.file.addEventListener('timeupdate', lyricAndProgressMove);

Funktion lyricAndProgressMove() {
  const audio = Audiodatei.Datei;
  const controlIndex = steuerung.index;

  const songLyricItem = document.getElementsByClassName('song-lyric-Item');
  wenn (songLyricItem.length == 0) returnieren;
  Lassen Sie aktuelle Zeit = audioFile.aktuelle Zeit = Math.round(audio.aktuelle Zeit);
  let Dauer = audioFile.duration = Math.round(audio.duration);
  let totalLyricRows = lyric.totalLyricRows = songLyricItem.length;
  let LyricEle = lyric.ele = songLyricItem[0];
  let rowsHeight = lyric.rowsHeight = LyricEle und LyricEle.offsetHeight;
  //Songtext-Bewegung lrcs[controlIndex].lyric.forEach((item, index) => {
    wenn (aktuelleZeit === Artikel.Zeit) {
      lyric.currentRows = Index;
      songLyricItem[index].classList.add('song-lyric-item-active');
      index > 0 && songLyricItem[index - 1].classList.remove('song-lyric-item-active');
      wenn (Index > 5 und Index < totalLyricRows - 5) {
        songInfo.lyricWrap.scrollTo(0, `${rowsHeight * (index - 5)}`)
      }

    }
  })
}

Wiedergabemodus-Einstellungen

Funktion: Klicken Sie, um in den Wiedergabemodus zu springen und das entsprechende Symbol zu ändern
Für Audio verwendete API: Keine

// Wiedergabemodus einstellen control.mode.addEventListener('click', changePlayMode);

Funktion changePlayMode() {
  modeControl.index = ++modeControl.index % 3;
  const mode = Steuerungsmodus;
  modeControl.index === 0 ?
    mode.setAttribute("Klasse", "playerIcon songCycleOrder") :
    modeControl.index === 1 ?
      mode.setAttribute("Klasse", "PlayerIcon SongCycleRandom") :
      mode.setAttribute("Klasse", "playerIcon songCycleOnly")
}

Projektvorschau

Codeadresse: https://github.com/hcm083214/audio-player

Damit ist dieser Artikel über den Beispielcode zur Implementierung eines Musikplayers mit nativem JS abgeschlossen. Weitere Informationen zum JS-Musikplayer finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Nativer JS-Musikplayer
  • js+audio zur Realisierung eines Musikplayers
  • js zur Implementierung eines einfachen Musikplayers
  • JavaScript zum Implementieren eines einfachen Musikplayers
  • Natives JS zur Implementierung eines kleinen Musikplayers
  • Beispielcode zum Erstellen eines einfachen Musikplayers mit js
  • JS+html5 zum Erstellen eines einfachen Musikplayers
  • Verwenden Sie js, um zu lernen, wie Sie ganz einfach einen HTML-Musikplayer erstellen
  • JavaScript zum Erstellen eines Musikplayers mit Beispielfreigabe für Wiedergabelisten
  • JS simuliert den Schrumpf-, Falt- und Schließeffektcode des Kugou-Musikplayers

<<:  So richten Sie ein Bereitstellungsprojekt unter einem Linux-System ein

>>:  Super einfache QPS-Statistikmethode (empfohlen)

Artikel empfehlen

JavaScript zum Erzielen eines elastischen Navigationseffekts

In diesem Artikel wird der spezifische Code für J...

Tutorial zur Installation von Pycharm und Ipython unter Ubuntu 16.04/18.04

Unter Ubuntu 18.04 1. sudo apt install python ins...

【HTML-Element】So betten Sie Bilder ein

Mit dem img-Element können wir Bilder in HTML-Dok...

Reines CSS-Dropdown-Menü

Ergebnisse erzielen Implementierungscode html <...

Docker-Reinigungskiller/Docker-Overlay-Datei nimmt zu viel Speicherplatz ein

[Wenn ich mir all die Migrationsdateien im Intern...

Detaillierte Erklärung zum virtuellen Javascript-DOM

Inhaltsverzeichnis Was ist virtueller Dom? Warum ...

Detaillierte Erklärung des Sandbox-Mechanismus von Vue3

Inhaltsverzeichnis Vorwort Browser kompilierte Ve...