2016/08に公開
webページに動画ファイルを埋め込むのに、html5ではvideoタグが使えます。これが使えるとかなり楽です。
とはいえ、企業によっては古いIEもサポート対象にしていることもあると思うので、古いIEの対応方法についても説明します。
<video src="動画ファイルのパス" controls></video>
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
これだけで、動画ファイルを貼り付けられます。
video{max-width: 100%;height: auto;}
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
videoタグにこのようにcssをあてておくと、スマートフォンなどで、動画の横サイズより画面が狭いときに画面に合わせて可変します。
また、サンプルのように親タグ内で動画を中央表示にさせたいときは親タグにalign:centerを設定しておくか、videoタグをdisplay:blockなどにしておいて、左右マージンをautoにするとよいです。
OS・ブラウザそれらのバージョンの組み合わせによっては再生できる動画ファイルの形式が異なるので、複数のファイル形式を同時に読み込んで、再生できるものを自動的に再生してくれるようです。
最新のブラウザのみを対象としているwebページであれば、mp4だけ用意していれば事足りるようです(2016/08現在)。
<video src="m/grahamekelaher.mp4" controls>
<source src="ogv動画ファイルのパス" type="video/ogg">
<source src="mp4動画ファイルのパス" type="video/mp4">
<p>※ご利用のブラウザでは動画を見ることができません。</p>
</video>
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
videoタグの中にタイプを指定して複数の形式の動画ファイルを指定できます。videoタグに対応していないブラウザに対してメッセージを表示させることもできます。
videoタグはIE8以下では動作しません。そこで、対策方法の一つとしてembedタグを使う方法があります。
embedはもともとNetscape Navigatorで、HTML4では非推奨ですが、html5では採用されているタグです。oldIEでも使えます(バリデートチェックするとエラー出るかもだけど)。
方法はこれに限らないので、あくまでも参考として、もっとスマートな方法を思いついたらそちらをご使用ください。
ついでにvideoタグに対応しているブラウザでは、コントローラーを非表示にして、独自デザインの再生ボタンを設置してみたいと思います。
ここではModernizr(サイト内リンク)とjQueryを用いてvideoタグ対応のブラウザの場合の処理を追加します。
<video id="video" src="m/grahamekelaher.mp4">
<source src="ogv動画ファイルのパス" type="video/ogg">
<source src="mp4動画ファイルのパス" type="video/mp4">
<embed src="mp4動画ファイルのパス" type="video/mp4" autostart="false">
</video>
<ul>
<li><button onclick="videoPlay()">再生</button></li>
<li><button onclick="videoPause()">一時停止</button></li>
</ul>
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
上記の複数のファイル形式でvideoタグ未対応のブラウザの場合、メッセージを表示させましたが、そのpタグの代わりにembedを記述します。
このサンプルではvideoタグに対応しているブラウザで独自の再生ボタンを設置したいので、buttonタグも記述しました。
buttonタグ(再生ボタン)をクリックしたら(onclick)、後述するvideoPlay関数を実行します(このサンプルでは一時停止ボタンも設置してみます)。
なお、どのvideoを再生させたいのかわかるようにvideoタグにidをつけます。id名は任意ですが、ここではvideoとしました。
button{
/*ボタンのデザイン*/
}
button.playing{
/*再生中の表示*/
}
button.pause{
/*一時停止中の表示*/
}
embed{height: 360px;width: 540px;} /*embedの表示サイズ*/
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
再生ボタン用のデザインをcssで設定します。
embedタグのサイズ指定は、cssではなく、タグのwidth属性・height属性で行っても構いません。
if (Modernizr.video) { //videoタグに対応している場合
function videoPlay(){
document.getElementById('video').play();
$('li:first-child button').addClass('playing');
$('li:last-child button').removeClass('pause');
document.getElementById('video').addEventListener('ended', function(){
$('li:first-child button').removeClass('playing');
$('li:last-child button').removeClass('pause');
}, false);
}
function videoPause(){
if(document.getElementById('video').currentTime > 0 && !document.getElementById('video').ended){
document.getElementById('video').pause();
$('li:last-child button').addClass('pause');
$('li:first-child button').removeClass('playing');
}
}
} else { //videoタグ未対応の場合
$(function(){
$('ul').remove();
});
}
※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。
jsのみで記述することも可能ですが、今回はjqueryを使うので、jqueryライブラリを読み込んでいることが前提です。
また、ブラウザの判定をModernizrで行っているので、Modernizrのvideo要素で判定するjsを読み込んでいることも前提です。
document.getElementById('video')を変数に格納して、変数を使い回すことで、もう少しコードをスッキリさせたかったのですが、なぜか変数に格納するとjsが動作しなくなったのでやむなくこうなりました(原因不明)。通常は、変数に格納しても問題ないと思います。
プラグイン(サイト内リンク)を用いる方法もあります。