【JavaScript】iOSでposition:fixedな要素をキーボード上に押し上げる
やりたいこと
モバイルだとテキストボックスなどにfocus
するとバーチャルキーボードが表示されるが、iOSの場合position:fixed
で配置した要素はこれによって隠れてしまうことがある。
そこで上記のYouTubeネイティブアプリのように、position:fixed
な要素をキーボードの上に添えながら押し上げて表示させたい。
解決法
CSSのみだと厳しいが、JavaScriptのvisualViewport
APIを利用することでお手軽に実現できる。
まずサンプルのレイアウトを作成する。
visualViewport
の基本的な使い方について、詳しくは下記記事で触れている。
【JavaScript】visualViewportでスマホのバーチャルキーボードの出現を検知し高さを取得する
これで無事、キーボードに押し上げられる形で対象要素が動いてくれた。(なぜかXcodeのシミュレーター上ではresize
イベントの発火までにラグがあったが、実機だと想定通りに動作した)
その他に試したこと
キーボードの高さの決め打ち
調べたところどうやらシェア率の高いiPhoneだと仮想キーボードの高さが270px
辺りらしいので、キーボードの高さを決め打ちして動かすという方法でもできなくはない。
しかし全デバイスでキーボードの高さが同一ではないので、配置がズレてしまうことを容認できる場合のみにしか使えない。ゆえにこの方法は断念した。
VirtualKeyboard APIの利用
VirtualKeyboard APIはその名の通り、ブラウザの仮想キーボードを制御するためのもの。
上記のように書くことでキーボードの高さを取得できるが、iOS16時点ではそもそもこのAPIがSafariに対応していないので無理だった。