[解決済み] iPadのWebアプリ。SafariでJavaScriptを使用して仮想キーボードを検出しますか?
質問
iPad用のWebアプリを書いています( 通常のApp Storeアプリではありません。 - HTML、CSS、JavaScriptで書かれています)。キーボードは画面の大部分を占めるので、キーボードを表示したときに残りのスペースに合わせてアプリのレイアウトを変更することは理にかなっていると思います。しかし、キーボードが表示されているかどうかを検出する方法がありません。
最初に考えたのは、テキストフィールドにフォーカスがあるとき、キーボードが表示されていると仮定することでした。しかし、iPadに外付けキーボードを取り付けると、テキストフィールドにフォーカスがあるときに仮想キーボードが表示されなくなります。
私の実験では、キーボードもDOM要素の高さやscrollheightに影響を与えず、キーボードが表示されているかどうかを示す独自のイベントやプロパティも見つかりませんでした。
解決するには?
少し醜いですが、うまくいく解決策を見つけました。また、すべての状況でうまくいくわけではありませんが、私にとってはうまくいっています。iPadのウィンドウサイズにユーザーインターフェースのサイズを合わせているので、通常、ユーザーはスクロールすることができません。つまり、ウィンドウのscrollTopを設定すると、0を維持することになります。
一方、キーボードを表示させると、いきなりスクロールができるようになります。そこで、scrollTopを設定し、すぐにその値をテストして、リセットすることができる。jQueryを使ったコードでは、このようになる。
$(document).ready(function(){
$('input').bind('focus',function() {
$(window).scrollTop(10);
var keyboard_shown = $(window).scrollTop() > 0;
$(window).scrollTop(0);
$('#test').append(keyboard_shown?'keyboard ':'nokeyboard ');
});
});
通常、これはユーザーには見えないと思われます。しかし、残念ながら、少なくともシミュレータで実行すると、iPadは目に見えて(すぐにですが)上下にスクロールし直します。それでも、少なくともいくつかの特定の状況では、動作します。
iPadでテストしてみましたが、問題なく動作しているようです。
関連
-
Vue+ElementUIによる大規模なフォームの処理例
-
JavaScriptの配列共通メソッド解説
-
vueのプロジェクトでモックを使用する方法を知っていますか?
-
[解決済み] テスト
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Javascriptで文字列の最後の文字を切り取るにはどうしたらいいですか?
-
[解決済み] JavaScriptでドロップダウンリストの選択値を取得する
-
[解決済み] JavaScriptでページの一番上までスクロールする?
-
[解決済み] Safari、Chrome、IE、Firefox、Operaのブラウザを検出する方法は?
-
[解決済み] jQueryを使用してキーボードのEnterキーを押したことを検出する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
jsを使った簡単な照明スイッチのコード
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
vue ディレクティブ v-html と v-text
-
Vueのクラススタイルの使い方の詳細
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR