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

So verwenden Sie griechische Buchstaben in HTML-Seiten

Griechische Buchstaben sind eine sehr häufig verw...

Detaillierte Erklärung zum Schreiben mehrerer Bedingungen von CSS: nicht

Der Pseudoklassenselektor :not kann Elemente filt...

Detaillierte Erklärung des Integer-Datentyps tinyint in MySQL

Inhaltsverzeichnis 1.1Tinyint-Typbeschreibung 1.2...

Lösung für das Problem der Nullspalte in der NOT IN-Füllgrube in MySQL

Als ich vor einiger Zeit an einer kleinen Funktio...

Docker-Installation Tomcat Dubbo-Admin-Instanz-Kenntnisse

1. Laden Sie das Tomcat-Image herunter Docker zie...

MySQL-Optimierung: Join statt Unterabfrage verwenden

Verwenden Sie JOIN anstelle von Unterabfragen MyS...

$nextTick-Erklärung, die Sie auf einen Blick verstehen

Inhaltsverzeichnis 1. Funktionsbeschreibung 2. Üb...

Toolkit: Ein leistungsfähigeres Front-End-Framework als Bootstrap

Hinweis: Die derzeit beliebtesten Front-End-Frame...

Beispiele für die Erstellung und Verwendung von MySQL-Triggern

Inhaltsverzeichnis Was ist ein Auslöser Erstellen...

Detaillierte Erklärung der MySQL Truncate-Verwendung

Inhaltsverzeichnis MySQL Truncate-Verwendung 1. T...

So verwenden Sie Binlog zur Datenwiederherstellung in MySQL

Vorwort Kürzlich wurden Daten online falsch bearb...