ブラウザスクロール時に発生するリサイズイベントへの対処法
以前、作成したWebアプリをレスポンシブに対応させた。その時にリサイズイベントによって横画面へ変更した時の対応を記載したが、リサイズイベントを使用したためにハマった点を記載する。
使用した環境
- Cloud9
- heroku
- HTML5
- jQuery 2.2.4
- Ruby on Rails 5.0.4
- GoogleVisionAPI
- Webブラウザ Chrome
- iPhone6
問題点
自分が実施したこと
今回、スマホを横画面にしてもCanvasの白い領域のサイズが動的に変更されるようにしたかった。そのため、最初は以下のようなコードを書いた。
window.addEventListener('risize',function(){ sizing(); //Canvasのサイズを変更する関数を別途記載 })
しかし、このままでは以下の問題が生じる。
2枚めの方が少しだけ白い領域が広くなっているのがわかる。(わかるでしょうか。。わからなくてもそうなっています)
これは上にスクロールするとブラウザのアドレスバーが消えるためその分ブラウザとして領域が広がるためリサイズイベントが発生している。
解決策
コードをいかに変更。
window.addEventListener('orientationchange',function(){ sizing(); })
これは、端末の向きが変わった際にorientationchangeというイベントが発生するため、それをトリガーとしてCanvasをリサイズしている。そのため、スクロールした際にアドレスバーによる領域サイズの変更ではリサイズは発火しない。