動画を使ったブラウザアプリを作成しています。
iPad限定で使用するアプリで、動画解説ページの動画を再生するボタンをおした時に、display:none;
で隠しておいたビデオをFullScreen APIを使って全画面表示をしてビデオを再生しています。
css
1// 普段はビデオ要素を非表示にしておく 2video { 3 display: none; 4}
javascript
1var video = document.getElementsByTagName("video")[0]; 2video.webkitEnterFullScreen(); // フルスクリーン状態にして、 3video.play(); // 再生
ここからが本題です。
ビデオの再生が完了したときに、下記の条件で別ページに遷移したいと思っています。
- ビデオが最後まで再生され、自動的にフルスクリーンが解除された時・・・完了ページに移動する
- ビデオを途中で中断してユーザーがフルスクリーンを解除した時・・・中断ページに移動する
これを実現しようと思い、videoのイベントを使って下記の様に設定してみました。
javascript
1var video = document.getElementsByTagName("video")[0]; 2video.webkitEnterFullScreen(); // フルスクリーン状態にして、 3video.play(); // 再生 4video.addEventListener("ended", function (evt) { 5 // ビデオの再生が完了した時に別のページに移動する 6});
しかし、この書き方だと、動画が完全に再生されたあとしか発火せず、動画を途中で中断してフルスクリーン状態が解除された時には発火しないのです。
videoのイベントに動画を途中で中断したなんていうものは存在しないので、Full Screen APIのイベントであるfullscreenchange
イベントを使えばうまく設定できるかも、と思って下記のように書いてみました。
javascript
1var video = document.getElementsByTagName("video")[0]; 2var video_state = ""; 3 4video.addEventListener("ended", function (evt) { 5 video_state = "ended"; 6}); 7 8video.addEventListener("fullscreenchange", function (evt) { 9 if (!evt.currentTarget.fullscreenEnabled && video_state == "") { 10 // フルスクリーンが解除された時に、video_stateが空なら中断されたとみなして、 11 //中断メッセージの書かれたページに移動 12 } else if ( !evt.currentTarget.fullscreenEnabled $$ video_state == "ended" ) { 13 // フルスクリーンが解除された時に、video_stateがendedなら、再生が完了しているとみなして、 14 // 完了メッセージがかかれたページに移動 15 } 16}); 17 18video.webkitEnterFullScreen(); // フルスクリーン状態にして、 19video.play(); // 再生
しかし、残念ながらfullscreenchange
イベントが発火せず行き詰ってしまいました。
webkitFullScreen
と書いているように、まだベンダープレフィックスを付けないと行けないと思ってwebkitを付けてみて試してみましたが(webkitfullscreenchange,webkitFullScreenChange
)それでもうまく行きませんでした。
色々と調べていると、Full Screen API自体がiOSに対応していないなんてことも書かれていたんですが、webkitFullScreen
は動作するしで、よくわからん状態です><
確認環境は、MacのSimulatorを使ってiOS9.2で確認しています。
どなたかよい方法をご存知の方、ご教授願います。
追記1:
MacのChromeではwebkitfullscreenchange
でうまくイベントが発火しました。。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。