振ると色が変わるスマホ用コンテンツをつくってみた
- 2019.03.21
- javascript+css つくったもの
- 加速度センサー
まずはデモをご覧ください。
振ると画面の色が変わります。
スマホでご確認ください。
加速度センサーのついているスマホでないとうまく再現されません。
iPhoneならいけるはずです。
コード解説
html
<div id="wrap"> スマホを振ると色が変わるよ </div>
css
body { margin: 0; padding: 0; } #wrap { width: 100%; height: 100vh; background-color: #fff; text-align: center; line-height: 100vh; font-size: 30px; font-size: 12px; }
#wrap を全画面表示。
あらかじめの背景を白(#fff)としています。
javascript
var wrap = document.getElementById('wrap'); var y; // 縦方向の加速度を取得するための変数 var size = 20; // 振ったと認識するサイズ var shakeFlag = true; // trueであればcountをプラス、falseであればマイナスにするためのフラグ var count = 0; // 振ったらこれがたまる。たまった量に応じて何かする // 加速度が変化すると window.addEventListener('devicemotion', function (event) { // 加速度 Y軸 y = event.acceleration.y; // 加速度が、sizeに指定した量より大きいもしくは-sizeより小さいときに、countを操作 if (y < -size || y > size) { // shakeFlagがtrueなら if (shakeFlag) { // countをプラス count++; } // shakeFlagがfalseなら else { // countをマイナス count--; } } // 色を変える処理 switch(count) { case 0: // countが0のとき wrap.style.backgroundColor = '#fff'; // ここで背景の色を変えていく shakeFlag = true; // shakeFlagをtrueにする break; case 20: wrap.style.backgroundColor = '#ffe'; break; case 40: wrap.style.backgroundColor = '#ffd'; break; case 60: wrap.style.backgroundColor = '#ffc'; break; case 80: wrap.style.backgroundColor = '#ffb'; break; case 100: wrap.style.backgroundColor = '#ffa'; break; case 120: wrap.style.backgroundColor = '#ff9'; break; case 140: wrap.style.backgroundColor = '#ff8'; break; case 160: wrap.style.backgroundColor = '#ff7'; break; case 180: wrap.style.backgroundColor = '#ff6'; break; case 200: wrap.style.backgroundColor = '#ff5'; break; case 220: wrap.style.backgroundColor = '#ff4'; break; case 240: wrap.style.backgroundColor = '#ff3'; break; case 260: wrap.style.backgroundColor = '#ff2'; break; case 280: wrap.style.backgroundColor = '#ff1'; break; case 300: wrap.style.backgroundColor = '#ff0'; break; case 320: wrap.style.backgroundColor = '#fe0'; break; case 340: wrap.style.backgroundColor = '#fd0'; break; case 360: wrap.style.backgroundColor = '#fc0'; break; case 380: wrap.style.backgroundColor = '#fb0'; break; case 400: wrap.style.backgroundColor = '#fa0'; break; case 420: wrap.style.backgroundColor = '#f90'; break; case 440: wrap.style.backgroundColor = '#f80'; break; case 460: wrap.style.backgroundColor = '#f70'; break; case 480: wrap.style.backgroundColor = '#f60'; break; case 500: wrap.style.backgroundColor = '#f50'; break; case 520: wrap.style.backgroundColor = '#f40'; break; case 540: wrap.style.backgroundColor = '#f30'; break; case 560: wrap.style.backgroundColor = '#f20'; break; case 580: wrap.style.backgroundColor = '#f10'; break; case 600: wrap.style.backgroundColor = '#f00'; break; case 620: wrap.style.backgroundColor = '#e00'; break; case 640: wrap.style.backgroundColor = '#d00'; break; case 660: wrap.style.backgroundColor = '#c00'; break; case 680: wrap.style.backgroundColor = '#b00'; break; case 700: wrap.style.backgroundColor = '#a00'; break; case 720: wrap.style.backgroundColor = '#900'; break; case 740: wrap.style.backgroundColor = '#800'; break; case 760: wrap.style.backgroundColor = '#700'; break; case 780: wrap.style.backgroundColor = '#600'; break; case 800: wrap.style.backgroundColor = '#500'; break; case 820: wrap.style.backgroundColor = '#400'; break; case 840: wrap.style.backgroundColor = '#300'; break; case 860: wrap.style.backgroundColor = '#200'; break; case 880: wrap.style.backgroundColor = '#100'; break; case 900: // countが900のとき wrap.style.backgroundColor = '#000'; shakeFlag = false; // shakeFlagをfalseにする break; } });
スマホの加速度センサーを使用しています。
Y方向(上下)の加速度が20を超えたら、countという変数がプラスされていきます。
countが20増えるごとに css で #wrap の背景色を変化させるようにしています。
この場合、countの数は900が上限になっています。
900に達すると count の数をマイナスにしていくようにしています。
0になるとまた count の数をプラスしていくようにして、無限に色が変わり続けるようにしました。
countFlag という変数が true の時はcountをプラス、false のときはマイナスとなるようにしています。
count が900になったら countFlag をfalseにし、0になったら countFlag をtrueにしています。
使い所
スマホの加速度センサーを試してみたくて作ってみましたが、ちょっと使い所に迷いますね。
年賀用のコンテンツとかで、ある程度振ったらおみくじが出てくるとかそんなもんでしょうか。
もうちょっと勉強しないと難しそうですが、振ると中のキャラクターがジャンプするみたいなマリオのようなゲームとかも作れそうですね。
-
前の記事
記事全体の読んだ分量を示すバーをつくる 2019.03.21
-
次の記事
マウスホイールで切り替わる全画面コンテンツをつくってみた 2019.03.22