Jak*_*ers 5 javascript video dom user-experience reactjs
我正在用 ReactJS 构建一个网站。该网站的第一个屏幕包含三个视频。我想知道如何设置一个事件,当所有三个视频都触发时加载后触发的事件。
我的目标是显示加载动画,直到所有视频都成功加载(这样用户就不会坐在那里盯着等待填充的视频容器)。理想情况下,当加载动画完成时,视频将完全加载并准备好播放,而不会中断 UI。
对于这个用例使用生命周期钩子似乎不起作用,因为这些钩子将等到 DOM 呈现,而不是等到多媒体加载。
// Does not work
// Similar to componentDidMount and componentDidUpdate:
useEffect(() => {
setIsLoading(false)
});
Run Code Online (Sandbox Code Playgroud)
我见过类似的问题提到使用该<video>
onLoad
事件:
<video ref={video1}
autoPlay
playsInline
muted
className="video"
loop
src={bike}
onLoad={()=>{console.log("I don't get called???")}}
/>
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,这个函数从未被调用。
这似乎是一个相对常见的用例,因此我非常感谢有关正确解决方案的建议。
额外信息:
小智 10
尝试使用“ onLoadedData ”事件。
我编写了一个小演示来验证所有三个视频是否已使用此事件加载。
使用onLoadedData事件触发setVideoLoaded。
<video
autoPlay
playsInline
muted
className="video"
loop
src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
onLoadedData={() => {
setVideoLoaded();
}}
/>
Run Code Online (Sandbox Code Playgroud)
每次视频加载触发事件时都会增加状态。当三个人都准备好玩时,再做一些事情。
const [loadCount, setLoadCount] = useState(0);
const setVideoLoaded = () => {
console.log("video loaded");
if (loadCount <= 1) {
setLoadCount(loadCount + 1);
} else {
console.log("All videos loaded!");
}
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3949 次 |
最近记录: |