gpt4 book ai didi

javascript - 你如何让 React 等待所有多媒体完全加载?

转载 作者:行者123 更新时间:2023-12-04 08:15:23 29 4
gpt4 key购买 nike

我正在用 ReactJS 构建一个网站。该站点的第一个屏幕包含三个视频。我想知道如何设置在加载完所有三个视频时触发的事件。

我的目标是显示我的加载动画,直到所有视频都已成功加载(这样用户就不会坐在那里盯着等待填充的视频容器)。理想情况下,当加载动画完成时,视频将完全加载并准备好播放,不会出现 UI 中断。

对该用例使用生命周期 Hook 似乎不起作用,因为这些 Hook 将等到 DOM 呈现,但不会等到多媒体加载。

  // Does not work
// Similar to componentDidMount and componentDidUpdate:
useEffect(() => {
setIsLoading(false)
});

我看到类似的问题提到使用 <video> onLoad事件:

<video ref={video1}
autoPlay
playsInline
muted
className="video"
loop
src={bike}
onLoad={()=>{console.log("I don't get called???")}}
/>

但由于某些原因,此函数从未被调用。

这似乎是一个相对常见的用例,因此我非常感谢有关正确解决方案的建议。

额外信息:

  • 这些视频将在本地可用(不会从外部端点获取)
  • 我更喜欢坚持使用功能组件

最佳答案

尝试使用“onLoadedData”事件。

我写了一个小demo使用此事件验证是否已加载所有三个视频。

使用onLoadedData事件触发setVideoLoaded。

      <video
autoPlay
playsInline
muted
className="video"
loop
src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
onLoadedData={() => {
setVideoLoaded();
}}
/>

每次视频加载触发事件时增加状态。然后在三个都准备好玩时再做一些事情。

const [loadCount, setLoadCount] = useState(0);

const setVideoLoaded = () => {
console.log("video loaded");
if (loadCount <= 1) {
setLoadCount(loadCount + 1);
} else {
console.log("All videos loaded!");
}
};

关于javascript - 你如何让 React 等待所有多媒体完全加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65730874/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com