javascript - 如何访问 Audio Src 以便 Src 的任何更新都会触发音频播放?
问题描述
我有一个包含组件的ReactJS
NextJS
应用程序。Audio
每当source
更新时,我希望应用程序load()
以及play()
新选择的曲目立即(用户不需要自己单击play
)。目前,更新源只是将新曲目加载到播放器并且不会触发 play。
source
页面上的是index
通过 a 设置的hook
,可通过以下方式访问React
Context
API
:
const [trackToPlay, setTrackToPlay] = useState("SELECT A CHAPTER");
下面是音频组件。在Index
页面上,source
播放器的 是动态设置的:
<audio ref={audioPlayer} preload="metadata" id="a1" src={{
"/": `${trackToPlay}.mp3`,
}[router.asPath]
}
type="audio/mpeg"
></audio>
下面是togglePlayPause
访问 的函数,audioPlayer
Ref
hook
但如您所见,它不是由对 的更改触发的Src
。它由user
点击触发play
:
const togglePlayPause = () => {
const prevValue = isPlaying;
setIsPlaying(!prevValue);
if (!prevValue) {
audioPlayer.current.play();
animationRef.current = requestAnimationFrame(whilePlaying);
} else {
audioPlayer.current.pause();
cancelAnimationFrame(animationRef.current);
}
};
此函数更新源,但它只是一个不影响播放状态的 React 钩子:
<div
className={styles.track}
onClick={() => {
changeTrack(d.chapter);
changeTrackTime(d.time);
}}
>
<--trackName-->
</div>
如何play
在选择新曲目时触发?我想我需要在 src 更改时useEffect
重新load()
使用togglePlayPause
fn ,但我不完全确定如何。
解决方案
推荐阅读
- python - 如何修复“加载 psycopg2 模块时出错:没有名为‘psycopg2’的模块”
- java - 如何在 Azure 应用程序日志中记录 Java/Spring Boot 应用程序生成的自定义应用程序日志?
- asp.net - 带 ID 的 Bootstrap 4 模态 div(来自 C# 模型的 Guid)
- python - 从 CSV 导入格式错误转换日期时间
- database - 包含来自同一记录的值的下拉列表
- php - 通过自定义字段值扩展 Woocommerce 搜索
- ios - 缩放表格视图
- xamarin - 从 Git 存储库克隆 Xamarin 文档后,如何在本地浏览它?
- swagger - Spring data rest 在 mongo 存储库中为 POST 方法在招摇中将 id 显示为路径变量?
- amazon-redshift - 为什么 Redshift UNLOAD 查询无法正确引用列?