【发布时间】:2020-08-31 18:12:30
【问题描述】:
任何有更多 React.js 时间的人会知道如何创建带有音频标签的音乐播放器吗?我正在重新组装组件,但歌曲的 src 没有改变……只有组件重新加载的第一首歌曲……我开发了这个逻辑,但我不知道它是否是最好的……
export default function Header(){
const catalog = [
{
name: 'michael jackson song',
url: 'michaeljackson.mp3'
},
{
name: 'madonna',
url: 'madonna.mp3' },
{
name: 'u2',
url: 'u2.mp3'
}
]
const size = catalog.length;
const [ index, setIndex ] = useState(0);
const [ principal, setPrincipal ] = useState(null);
const audioRef = useRef();
useEffect(() => {
setIndex(Math.floor(Math.random() * size));
},[])
useEffect(() => {
setPrincipal(catalog[index]);
},[index]);
useEffect(()=>{
if(index !== null ){
audioRef.current.addEventListener('ended', () => {
setIndex( prev => prev + 1 === size - 1 ? prev + 1 : Math.floor(Math.random() * size))})
}
},[])
function handleBack(){
if( index === 0) {
setIndex(Math.floor(Math.random() * size))
} else {
setIndex( prev => prev - 1);
}
}
function handleNext(){
setIndex( prev => prev + 1 === size - 1 ? prev + 1 : Math.floor(Math.random() * size))
}
return (
<>
{ principal ?
<>
<div>
<button onClick={() => handleBack()}> back </button>
<p>{principal.name}</p>
<button onClick={() => handleNext()}> next </button>
</div>
<audio ref={audioRef} controls>
<source src={principal.url}/>
</audio>
</>
: null }
</> )
}
如果有人想测试它,我在 S3 上放了这两条轨道。
https://aleatorio.s3.amazonaws.com/slowdown.mp3
https://atracks.s3.amazonaws.com/Example+-+All+Night+(OUT+NOW).mp3
【问题讨论】:
-
确保您接受答案,因为它对您有用!
标签: reactjs