音乐播放器播放列表逻辑

Music player playlist logic

我正在创建一个小型音乐播放器网络应用程序,一切正常,但我遇到了问题:

我也想为它创建一个播放列表,我是 JS 的初学者,我不知道如何为此创建逻辑(每次用户单击播放列表中的特定歌曲标题时,播放他刚刚点击的那首歌曲)我将歌曲存储在一个数组中

源代码: https://yun.ir/qnrk56

您可以通过不同的方式实现此行为。

这是我尝试过的: https://jsfiddle.net/2qc0kwbg/

我添加了一个名为 setSong() 的函数,它接受一个名为 number 的参数并将歌曲设置为该编号(从 prevSong()nextSong() 复制的代码逻辑)。我向每个 HTML 元素添加 class .player__song onclick 属性值为 setSong(<index>) 其中 是歌曲在数组。

setSong() 函数如下所示:

function setSong(number){
  currentSong = number
  showSong()
  audio.play()
  changeBgBody()
}
import React, { Component,useRef, setStatus, status } from 'react';
import ‘./Song.css';

import song1 from "./music/song1.mp3";
import song2 from "./music/song2.mp3"
import song3 from "./music/song3.mp3"
import song4 from "./music/song4.mp3"

export default function MusicPlayer() {
    const data = [
        { imgSrc: ‘song1.png', audioSrc: song1},
        { imgSrc: ‘song2.png', audioSrc: song2},
        { imgSrc: ‘song3.png', audioSrc: song3},
        { imgSrc: ‘song4.png', audioSrc: song4},
    ];

    return (
        <div className=‘MusicPlayer>
            <ol>
            
                {data.map(({ imgSrc, audioSrc}) => (
                    <MediaComponent imgSrc={imgSrc} audioSrc={audioSrc}   />
                ))}
            </ol>
        </div>
    );
  
}

const MediaComponent = ({ imgSrc, audioSrc }) => {
    const audioRef = useRef(null);
    const toggleAudio = () =>
      audioRef.current === null
        ? console.log("Audio component is not loaded yet.")
        : audioRef.current.paused
        ? audioRef.current.play()
        : audioRef.current.pause();

        
    return (
        <li>
            <img src={imgSrc} onClick={toggleAudio} />
            
            <audio
                ref={audioRef}
                src={audioSrc}
                onLoad={() => setStatus({ ...status, isLoaded: true })}
                onPlay={() => setStatus({ ...status, isPlaying: true })}
                onPause={() => setStatus({ ...status, isPlaying: false })}
                onError={() => setStatus({ ...status, error: true })}
            />
        </li>
    );
};