前回までは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を使って更に便利な動画の機能を作成することも出来ます。
また機会があれば紹介していきたいです。