前提・実現したいこと
動画再生サイトを作成しております。
複数の動画を1つの画面で再生しており、メインで再生している動画が切り替わった際にメインで再生していた動画のEventを削除したいのですが、うまくいきません。
RemoveEventListnerを効かせるやり方を教えていただきたいです。
該当のソースコード
activeVideoIdにはランダムで生成したstring型のuuidが入っており、activeVideoIdでメインで再生している動画の判別をしています
const [intervalId, setIntervalId] = useState(0); useEffect(() => { if (context.activeVideoId === props.video.uuid) { console.log("add"); videoEle.addEventListener("play", playEvent); videoEle.addEventListener("ended", endedEvent); } else { console.log("remove"); videoEle.removeEventListener("play", playEvent); videoEle.removeEventListener("ended", endedEvent); } }, [context.activeVideoId]); const playEvent = () => { let id = setInterval(() => { context.setFrame(videoEle.currentTime * context.fps); return () => clearInterval(id); }, context.fps); setIntervalId(id); }; const endedEvent = () => { context.setIsPlay(false); pauseEvent(); }; const pauseEvent = () => { clearInterval(intervalId); };
試したこと
addEventListener、removeEventListnerの第三引数に false を設定
playEvent/endedEventを定数ではなく、functionで定義
捕捉
VideoEleにはdocument.createElement("video")で<video>要素を作成し、格納しています。
現象としてはメインではない動画が再生終了すると動画が止まってしまいます。
endedEventにconsole.logを追加し確認したところコンソールに表示されました。
回答2件
あなたの回答
tips
プレビュー