斯蒂芬大帝
2022-12-22 11:52:48
我正在使用 React.js 并且我有一個返回音頻的 API:{ audios: [ "https://thisisanaudiolink", "https://thisisanaudiolink", "https://thisisanaudiolink" ]}我不想使用 HTML 的音頻標簽來播放,而是我的自定義按鈕。我怎樣才能做到這一點?到目前為止我已經嘗試過:我試過這個循環,但所有按鈕只播放最后一個音頻:import React, { useState, useRef } from "react";const Flashcards = () => {const [audios, setAudios] = useState([ "https://s3-sa-east-1.amazonaws.com/carneiro/public/card_audios/d7f2a0-5c89ef/4.wav", "https://s3-sa-east-1.amazonaws.com/carneiro/public/card_audios/d7f2a0-5c89ef/12.wav", "https://s3-sa-east-1.amazonaws.com/carneiro/public/card_audios/d7f2a0-5c89ef/1.wav"]);const audioRef = useRef();return ( <div> { audios.map(audio => ( <div key = {audio}> <audio controls = "controls" preload = "auto" autobuffer = "true" style = {{display: "none"}} ref = {audioRef} > <source src = {audio} /> </audio> <button onClick = {() => audioRef.current.play()}>Play</button> </div> )) } </div> )}export default Flashcards;
1 回答

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
所有按鈕將播放最后一個音頻的原因是因為您嘗試將所有音頻與一個參考綁定,每個音頻參考相互覆蓋直到最后一個音頻。有幾種方法可以實現你想要的。最簡單的方法是創建單獨的組件來處理您的音頻播放按鈕。例如:
function AudioPlayer({ src }) {
const audioRef = useRef();
return (
<div>
<audio
controls = "controls"
preload = "auto"
autobuffer = "true"
style = {{display: "none"}}
ref = {audioRef}
>
<source src={src} />
</audio>
<button onClick = {() => audioRef.current.play()}>Play</button>
</div>
);
}
然后你可以在你的audio.map
audios.map(audio => <AudioPlayer src={audio} />);
添加回答
舉報
0/150
提交
取消