前回まではVideo.jsを使用したカスタマイズを行いました。

今回はJavaScriptを使って、オリジナルのプレーヤーを自作していきます。
自分の好きな所にボタンを置くことが出来るので、より自由にプレーヤーを作ることが出来ます。

再生・停止

まずは基本的な再生・停止ボタンを作っていきます。

HTML

<button id="play">再生する</button>
<button id="pause">停止する</button>

JavaScript

const btn_play = document.getElementById('play');
const btn_pause = document.getElementById('pause');
const video = document.querySelector('video');
// 再生ボタン
btn_play.addEventListener('click', e => {
video.play();
});
// 停止ボタン
btn_pause.addEventListener('click', e => {
video.pause();
});

動画を再生する場合は.play()メソッドを、停止する場合は.pause()メソッドを使用します。

秒送り/戻し

続いて、再生位置を指定した秒数だけ進めたり、戻すボタンを作成していきます。

HTML

<button id="back">10秒戻る</button>
<button id="forward">10秒進む</button>

JavaScript

const btn_back = document.getElementById('back');
const btn_forward = document.getElementById('forward');
// 10秒戻す
btn_back.addEventListener('click', e => {
video.currentTime -= 10;
});
// 10秒進める
btn_forward.addEventListener('click', e => {
video.currentTime += 10;
});

ここで出てくるcurrentTimeプロパティとは、現在の再生時間のことです。
再生時間に10秒プラスすることで秒送りをします。

ちなみに、video.currentTime = 0;とすることで再生位置を最初に戻すことが出来ます。

再生速度

動画の再生速度を変更するにはplaybackRateプロパティを追加します。

HTML

<button id="slow">スロー</button>
<button id="normal">通常</button>
<button id="fast">早送り</button>

JavaScript

const btn_slow = document.getElementById('slow');
const btn_normal = document.getElementById('normal');
const btn_fast = document.getElementById('fast');

// 再生速度を遅くする
btn_slow.addEventListener('click', e => {
video.playbackRate = 0.8;
});
// 再生速度を元に戻す
btn_normal.addEventListener('click', e => {
video.playbackRate = 1.0;
});
// 再生速度を早くする
btn_fast.addEventListener('click', e => {
video.playbackRate = 1.5;
});

再生を遅くするにはplaybackRateの値を0.1〜0.9の間で指定します。
逆に早くするには1.1以上の値を指定します。
再生速度を変更するボタンを実装する際には、元の再生速度に戻すボタンも設置するようにしましょう。

シークバー

最後にシークバーを作成していきます。
1. 動画の総再生時間を取得
2. 現在の再生時間を取得
3. 1に対して2がどのくらいの位置にあるのか算出

シークバー作成にあたって行う手順は上記の通りです。
これをtimeupdateイベントを使って、動画の再生中に合わせてリアルタイムで行います。

HTML

<div id="seekbar">
<div id="current"></div>
</div>

css

#seekbar {
width: 640px;
height: 5px;
background-color: gray;
}
#current {
width: 0;
height: 5px;
background-color: red;
}

JavaScript

const current = document.getElementById('current');

video.addEventListener('timeupdate', e => {
// 動画の総再生時間を取得
let time = video.duration;
// 現在の再生時間を取得
let current = video.currentTime;
// 再生時間の進捗割合をパーセントで算出
let timeRatio = (current/time)*100;
// 進捗割合に合わせてシークバーの長さを変化
current.style.width = timeRatio+'%';
});

基本的な機能の実装は以上となります。
あとはcssを使って好みのデザインにスタイリングしていけばOKです。

JavaScriptを使って更に便利な動画の機能を作成することも出来ます。
また機会があれば紹介していきたいです。