WEBページ内の特定HTML要素を画面全体に広げられるフルスクリーンAPIのラッパーモジュールをnpmで公開しました。
WHATWGが策定しているフルスクリーンAPIは、現状(2017年5月現在)、多くのブラウザで、プリフィックス付きの実装(moz
とかwebkit
というアレですね)となっています。
なので、いろんなブラウザで動作させるには結構邪魔くさいことをするわけですが、このモジュールを使えば標準仕様と同じように利用できます。
目次
↓npm fullscrnはコチラです。
売り上げランキング: 247,047
1. リリースファイル
- fullscrn.js - SCRIPTタグで読み込む用。Browserifyでまとめているからちょっと読みにくいかも。
- fullscrn.min.js - ↑をミニファイしたもの(uglify使用)
- index.js - ソースファイル。npmでBrowserifyを使用してrequireする場合はコチラが使用されると思います。
2. サンプル
あまり意味のないサンプルですけどすみません。動きはわかると思います。
<body onload="main();"> <button type="button" onclick="request1();" >Full>></button> <span id="panel"> <button type="button" onclick="request2();" >Full>></button> <button type="button" id="exitButton" onclick="exit();"><<Exit</button> </span> <script src="fullscrn.js"></script> <script> var panel = document.getElementById("panel"); var exitButton = document.getElementById("exitButton"); Fullscreen.debugMode(true);// Enables debug log function main() { // Handle change event document.addEventListener("fullscreenchange", function() { var fse = document.fullscreenElement; console.log("FULLSCREEN CHANGE: " + ((fse == null)? "(null)": "#" + fse.id)); }); // Handle error event document.addEventListener("fullscreenerror", function() { console.log("FULLSCREEN ERROR"); }); request1(); // This should be error } function request1() { panel.requestFullscreen().then(function(){ console.log("request1 done."); }).catch(function(err) { console.error(err.message); }); } function request2() { exitButton.requestFullscreen().then(function(){ console.log("request2 done."); }).catch(function(err) { console.error(err.message); }); } function exit() { document.exitFullscreen() .then(function(){ console.log("exit done."); }).catch(function(err) { console.error(err.message); }); } </script> </body>
3. API
以降の各インターフェースは、標準仕様の通りに使用できるように、DOMの DocumentクラスやElementクラスのprototypeに、インジェクトしています。
ただし、完全一致を狙っているわけではないので、完全に同じ挙動をすることを保証しません。各社ブラウザ間でも挙動が微妙に違っていたりしますが、そこには全く触れていません。
また、2017-05-16にWHATWGの仕様が改定されており、本モジュール作成にあたっては、それ以前の仕様を参考にしていたため、違うところがあるかもしれません(未確認)。
※ 別途、独立したAPIもエクスポートしていますが、使う必要が無いのでここでは説明しません。
1) プロパティ
Document.fullscreenEnabled
フルスクリーンAPIが使用できるかどうかを示すbool型のプロパティ。スクリプトの読み込み時に決定します。
Document.fullscreenElement
全画面モードになっている要素を保持します。全画面モードでないときはnullです。
Document.fullscreen
参照時点で全画面モードかどうかを示すbool型のプロパティ(Document.fullscreenElement != null
と同等)。
2) メソッド
以下、どちらも、操作の完了時に解決するPromiseを返します。まあ殆どの場合無視して構いません。
Element.requestFullscreen()
HTML要素で全画面モードを開始する要求を行います。
Document.exitFullscreen()
全画面モードを終了します。
3) イベント
全画面の状態が変化した場合や、エラー発生時のイベントです。
どちらも、document.addEventListener
でイベントハンドラを登録して利用してください。
(Document.onfullscreenchange
/ Documentonfullscreenerror
には未対応です)
Document "fullscreenchange"
全画面モードの状態変化時に発生します。
Document "fullscreenerror"
全画面モードに関するエラーがあった時に発生します。
ていうか標準仕様と同じですから。
4. リンク
- Fullscreen API Living Standard — Last Updated 16 May 2017
- フルスクリーンモードを使用する - ウェブデベロッパーガイド|MDN
- npm fullscrn - Fullscreen API
5. あとがき
標準仕様と実装の混乱ぶり
現状、フルスクリーンAPIはプリフィックス付きで実装されているのに、既にObsoleteな仕様があったりしてカオスです。
さらに「Fullscreen
なの?FullScreen
なの?どっち?」という若干低レベルな混乱ぶりも垣間見れ、非常に使いづらい状況でした。
各社勝手に実装して、後から仕様をまとめるからこうなるんだろうなあ。知らんけど。
どうでもいいこと
このモジュール、ほとんどフルスクリーンAPIのPolyfillだと言えると思うのですが、npmでは既にfullscreenというモジュールが公開されていたため、仕方なくfullscrnという名になってます。
アチラはAPIのインターフェースがWHATWGの仕様に合致していないっぽいので、色んな意味でちょっと残念。 (# ̄З ̄)
しかしダウンロード数が遥かに多くて(約20倍!)、本家といえばアチラなのかも?