JavaScriptでフルスクリーンを検知する
各ベンダーごとにイベントリスナーを追加して、fullscreenchange
イベントを検知する必要がある。
(MDN見る限り、フルスクリーンAPIの諸々がSafariに対応してないのでちょっとめんどくさい)
document.addEventListener("webkitfullscreenchange", myFunc, false); document.addEventListener("mozfullscreenchange", myFunc, false); document.addEventListener("MSFullscreenChange", myFunc, false); document.addEventListener("fullscreenchange", myFunc, false);
ただ、これらをいちいちadd/removeするのはめんどくさいので、まとめて扱えるようにする。 addで作ってるが、イベントリスナーを削除したいときはremoveでつくればよい。
const target = document; addMultipleEventListener( target, "webkitfullscreenchange mozfullscreenchange MSFullscreenChange fullscreenchange", myFunc ) --- const addMultipleEventListener = (element, eventNames, listener) => { const events = eventNames.split(" "); events.forEach(event => target.addEventListener(event, listener, false)); }
ハンドラーに関しては下記のように、fullScreenElement
をチェックする。
null
が返ってきたらフルスクリーンではなく、対象となるDOMのnodeName
が返ってきたらフルスクリーンということ。
const myFunc() { const target = document; if ( (target.webkitFullscreenElement && target.webkitFullscreenElement !== null) || (target.mozFullScreenElement && target.mozFullScreenElement !== null) || (target.msFullscreenElement && target.msFullscreenElement !== null) || (target.fullscreenElement && target.fullscreenElement !== null) ) { console.log("フルスクリーンです"); } else { console.log("フルスクリーンじゃないです"); } }
下記参考URL
Netlify CMS+Nuxt.jsで管理画面を使えるようにする
これを参考に各種設定してみた。
一点、ブランチ名がmaster
ではなくmain
になってるので、その点は注意。
Nuxt.js+Netlify+GitHubでサイトを立ち上げる
Vue.jsでTextareaフォーカス時にReturnキーを押したらSubmit処理する
KeyboardEventを型として、keyとcodeの両方で"Enter"を検出する。 下記の例では、0文字のときは送信しなかったり、改行したいときの対策でShiftを押している時は送信しないようにしている。
<textarea v-model="text" @keypress="onInputKeyPress"></textarea>
onInputKeyPress(_e) { if (_e.key == "Enter" || _e.code == "Enter") { if (this.text.replace(/\s/g, "").length > 0 && !_e.shiftKey) { _e.preventDefault(); // Submit系の処理 } } }
mobile-device-detect を導入した
Vueプロジェクトでデバイス検出するためにmobile-device-detectを使ってみた。 普段のサービス開発では、nuxt-device-detectを使っていて、これはそれに似たもの。
導入
$ yarn add mobile-device-detect
Vueファイルの中でいちいち呼び出すこともできるか、冗長なので手軽に呼び出せるようにする。
plugins/DeviceDetect.js
みたいなファイルを作って、下記のようにインスタンスプロパティを追加する。
import { deviceDetect } from "mobile-device-detect"; export default Vue => { Vue.prototype.$deviceDetect = deviceDetect(); };
こうするとすべてのVueインスタンスの中でthis.$deviceDetect.isMobile
という風に使うことができる。
さらにここでユーティルを作っていろんなとこで使っている。 例えばこのライブラリではデバイスの向きは検出できないので、そこを補填して組み合わせるということができる。
import { deviceDetect, isMobileOnly } from "mobile-device-detect"; export default Vue => { Vue.prototype.$deviceDetect = deviceDetect(); Vue.prototype.$deviceDetect.isSPLandscape = () => { return isMobileOnly && window.innerWidth > window.innerHeight; }; };
Vue Material Design Icon Components を導入した
Oculus Quest が届いた
今更?なのかもしれないけど、XR領域についてもっと知りたかったので手頃なOculus Questを購入した。 まず箱の装丁かっこいい、次に導入体験もめちゃかっこいい。 チュートリアルなのにめちゃくちゃ感動してしまって、手汗がひどかった。どうしてもっと早くやらなかったのか。
僕自身もOculus Questの方をおすすめされて買ったわけだけど、スタンドアローンでPC必要ないしとても気軽に使える。
最近は安定的に在庫があるっぽいし、国からお金も入ってくるようだし、家にいる時間もどんどん増えるので、この機会にVRをはじめるのは非常におすすめ。
まずはSuperHotとTilt Brushで遊んでみます。
【正規輸入品】Oculus Quest (オキュラス クエスト)- 128GB
- 発売日: 2019/05/21
- メディア: Video Game