React-Player 创建一个音乐播放器,并且带有进度条,音量控制,上下首,
时间: 2024-06-08 20:08:36 浏览: 266
react-jw-player-master.zip_jwplayer网页视频播放器_player_react jwplayer
好的,我们可以使用 React-Player 库来创建一个音乐播放器。首先,需要安装 React-Player:
```
npm install react-player
```
然后,我们来创建一个组件 `MusicPlayer`,代码如下:
```jsx
import React, { useState, useRef } from "react";
import ReactPlayer from "react-player";
const MusicPlayer = ({ tracks }) => {
const [playing, setPlaying] = useState(false);
const [currentTrack, setCurrentTrack] = useState(0);
const [played, setPlayed] = useState(0);
const [volume, setVolume] = useState(0.5);
const playerRef = useRef(null);
const handlePlayPause = () => {
setPlaying(!playing);
};
const handleProgress = (state) => {
if (!state.seeking) {
setPlayed(state.played);
}
};
const handleNextTrack = () => {
if (currentTrack < tracks.length - 1) {
setCurrentTrack(currentTrack + 1);
setPlaying(true);
setPlayed(0);
}
};
const handlePrevTrack = () => {
if (currentTrack > 0) {
setCurrentTrack(currentTrack - 1);
setPlaying(true);
setPlayed(0);
}
};
const handleVolumeChange = (value) => {
setVolume(parseFloat(value));
};
const formatDuration = (seconds) => {
const date = new Date(seconds * 1000);
const hh = date.getUTCHours();
const mm = date.getUTCMinutes();
const ss = date.getSeconds().toString().padStart(2, "0");
if (hh) {
return `${hh}:${mm.toString().padStart(2, "0")}:${ss}`;
}
return `${mm}:${ss}`;
};
return (
<div className="music-player">
<ReactPlayer
ref={playerRef}
url={tracks[currentTrack].url}
playing={playing}
volume={volume}
onProgress={handleProgress}
onEnded={handleNextTrack}
/>
<div className="controls">
<div className="buttons">
<button onClick={handlePrevTrack}>{"<<"}</button>
<button onClick={handlePlayPause}>{playing ? "Pause" : "Play"}</button>
<button onClick={handleNextTrack}>{">>"}</button>
</div>
<div className="time">
<span>{formatDuration(tracks[currentTrack].duration * played)}</span>
<input
type="range"
min={0}
max={1}
step="any"
value={played}
onChange={(e) => setPlayed(parseFloat(e.target.value))}
/>
<span>{formatDuration(tracks[currentTrack].duration)}</span>
</div>
<div className="volume">
<input
type="range"
min={0}
max={1}
step="any"
value={volume}
onChange={(e) => handleVolumeChange(e.target.value)}
/>
</div>
</div>
</div>
);
};
export default MusicPlayer;
```
在 `MusicPlayer` 组件中,我们使用了一些状态来控制播放器的行为:
- `playing`:是否正在播放。
- `currentTrack`:当前播放的曲目索引。
- `played`:当前曲目已播放的进度。
- `volume`:音量大小。
我们还使用了 `useRef` 来获取 `ReactPlayer` 组件的实例,方便我们调用其方法。
在组件的返回值中,我们渲染了播放器,包括:
- `ReactPlayer` 组件,用于播放音乐。
- 控制按钮,包括上一首、播放/暂停、下一首。
- 播放进度条。
- 音量控制条。
其中,播放进度条和音量控制条使用了 `input` 元素,通过 `value` 和 `onChange` 属性来控制其状态。
最后,我们可以使用 `MusicPlayer` 组件来播放音乐,如下所示:
```jsx
import React from "react";
import MusicPlayer from "./MusicPlayer";
const tracks = [
{
url: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3",
duration: 221,
},
{
url: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3",
duration: 142,
},
{
url: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-3.mp3",
duration: 266,
},
];
const App = () => {
return <MusicPlayer tracks={tracks} />;
};
export default App;
```
在 `App` 组件中,我们定义了一个 `tracks` 数组,包含了三首音乐的 URL 和时长。然后,我们将 `tracks` 数组作为 `MusicPlayer` 组件的 `tracks` 属性传入即可。
这样,一个简单的音乐播放器就完成了。你可以试着运行代码,看看效果如何。
阅读全文