1 回答
TA贡献1794条经验 获得超7个赞
因此,这将阻止您的视频在任何滚动事件中播放。如果你希望它在离开视口时停止播放,你可以考虑使用类似IntersectionObserver API 的东西来做一些事情,如果它在视口中(播放视频)或在视口外(停止视频)。
注意:大多数现代浏览器不允许 Javascript 启动视频,除非至少已经有一些用户与页面进行了交互。
const [playing, setPlaying] = useState(false);
const videoRef = useRef(null);
useEffect(() => {
window.addEventListener('scroll', debounce(handleScroll, 200))
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []}
const startVideo = () => {
videoRef.current.pause();
setPlaying(false);
}
const pauseVideo = () => {
videoRef.current.play();
setPlaying(true);
}
const handleScroll = (e) => {
if (playing) {
pauseVideo();
}
}
const handleVideoPress = () => {
if (playing) {
startVideo();
} else {
pauseVideo();
}
};
return (
<div className="video">
<video
onClick={handleVideoPress}
className="video__player"
loop
ref={videoRef}
src={url}
></video>
);
}
我做了一个使用 React 的引用钩子的工作示例IntersectionObserver,可以在这里找到:
https://codesandbox.io/s/strange-smoke-p9hmx
如果您还有其他问题,请告诉我。
添加回答
举报