概要
htmlのvideoタグをJavaScriptで操作する時の注意点です。
videoをpause()
すると動画は停止するのですが、ロードは止まりません。複数の動画があり、一方を止めてもう一方を再生したら、両方ともロードし続ける場合があります。
videoタグの仕様を調べても解決方法は見つからず、ロードを止める方法を探すのに手間取りました。
解決方法
解決方法は以下の通りです。(解決してしまえば、納得)
- videoを
pause()
する。 - sourceの
src
を空にする。 - videoを
load()
する。
ちなみに、以下の方法はダメでした。ロードが続きます。
-
src
を空にした後、load()
しない。 - JavaScriptでvideoタグを削除する。
サンプルコード1
javascript
const video = document.querySelector('video');
// 再生
video.play();
// 一時停止
video.pause();
// ロードストップ
const source = video.querySelector('source');
source.src = '';
video.load();
#サンプルコード2
ロードを止めた後、もう一度再生するためにsrc
を扱いやすくしたサンプルです。
html
<video loop muted playsinline preload="none">
<source src="" data-src="./mov/sample.mp4" type="video/mp4">
</video>
javascript
const video = document.querySelector('video');
const source = video.querySelector('source');
// 再生
source.src = source.dataset.src;
video.load();
video.addEventListener('canplay', () => {
video.play();
});
// 一時停止
video.pause();
// ロードストップ
source.src = '';
video.load();
data-src
を使用するとvideoのpreload
が機能しません。もしpreload
を使いたい場合は、src
とdata-src
を両方書くか、JavaScriptでsrc
の値を保持しておき、再再生時に使うと良いと思います。
おわり
再生もロードも止まるstop()
が欲しいところですが、無いので自分で止めました。
こちらを参考にしました。
https://stackoverflow.com/questions/4071872/html5-video-force-abort-of-buffering