Это код, который получает продолжительность каждого аудио.
useEffect(() => {
const currentData = data?.map(data => {
const audio = document.createElement('audio')
audio.src = data.assets[0].audio
audio.addEventListener('loadedmetadata', function () {
const duration = audio.duration
setFeaturesDuration([duration])
console.info(duration)
// durationArray.push(duration)
})
})
}, [])
Это то, что я получил, когда продолжительность console.info
PlayList.js:59 56.816333
PlayList.js:59 42.658
PlayList.js:59 50.651333
PlayList.js:59 55.928167
PlayList.js:59 57.391
PlayList.js:59 37.955833
PlayList.js:59 64.052167
PlayList.js:59 47.986833
PlayList.js:59 59.4285
PlayList.js:59 46.706833
PlayList.js:59 56.581167
Но что я хочу сделать, так это то, что я хочу отобразить его в своем списке воспроизведения, вот код, который отображает мой список воспроизведения, ближе к концу кода содержится диапазон, который имеет значение продолжительности.
{data?.map((data, index) => {
// const songDuration = getDuration(data.assets[0].audio)
// console.info(songDuration)
return(
<li
onClick = {(e) => {
e.preventDefault()
setActive(true)
store.addSong(data.assets[0].audio)
store.addImage(data.photo)
store.addName(data.name)
store.addSongIndex(index)
}}
key = {data?.id}>
<div className = "plItem">
<span className = "trackNumber">{index + 1}</span>
<span className = "trackTitle">
<WordLimit limit = {15}>
{data ? data.name : "word"}
</WordLimit>
</span>
<span>{Duration}</span>
</div>
</li>
)
}
)}
О, так я никак не могу получить его от клиента??
Я так не думаю, Север должен быть подходящим местом для этого. Когда они сохраняют URL-адреса видео, они также должны хранить продолжительность. Предположим, у вас есть 100 URL-адресов в списке для каждого рендера, который вам нужно рассчитать и показать. Это снизит производительность.
О, хорошо, спасибо большое за ответ..
Хорошо, большое спасибо за ваш ответ, это много значит..
Я также добавил ответ, чтобы другие могли обратиться позже.
Я так не думаю. Это возможно, даже если это возможно.
Я бы предположил, что сервер должен быть подходящим местом для этого. Когда они сохраняют URL-адреса видео, они также должны хранить продолжительность. Чтобы они могли отправлять всю связанную (мета) информацию (название, продолжительность, URL-адрес и т. д.) в API. На сервере расчет будет однократный.
Предположим, у вас есть 100 или более URL-адресов видео в списке для каждого рендеринга компонента, вам нужно рассчитать продолжительность и показать. Это неправильный способ сделать это. Это окажет огромное влияние на производительность.
Вы не можете дать напрямую, API должен возвращать значение продолжительности. Клиентская сторона — неподходящее место для определения продолжительности.