web-dev-qa-db-ja.com

jQuery / js / html5モバイルデバイスでキーボードが表示されているときにページコンテンツを変更する

重複の可能性:
iPad Web App:SafariでJavaScriptを使用して仮想キーボードを検出しますか?

私はWebサイトのモバイルバージョンを構築しています。仮想キーボードが表示されているときにモバイルアプリで作成できるのと同じ分割画面効果をjQuery/js/html5またはその他のテクノロジーを使用して作成できるかどうか興味があります。

たとえば、ユーザーが自分のWebページを入力してテキスト入力フィールドをクリックすると、仮想キーボードが表示され、ブラウザはテキスト入力フィールドがある領域に自動的にズームします。

私が欲しいのは、仮想キーボードが新しい解像度(画面の高さ-キーボードの高さ)に基づいて表示された瞬間にページのコンテンツを変更できるようにすることです。ユーザーがテキストフィールドに入力したもの。

これが私が話していることを確認するためのいくつかのスケッチです:

これはキーボードなしのページビューであり、検索に基づく結果です。

page without keyboard

縦向きキーボードのページ、ロゴが消え、テキスト入力が一番上に移動し、最大4つのアイテムが表示されます

page with portrait keyboard

横長キーボードのページ、ロゴが消え、入力が上に移動して拡大され、2つのアイテムのみが表示されます

enter image description here

キーボードが非表示の場合、ページはフェーズ1に進むはずです。

お役に立てれば。

16
Doua Beri

私はサイズ変更イベントをキャッチすることで問題の最初の解決策を試みました

[〜#〜] update [〜#〜]LKM solution を使用してiOSモバイルサファリサポートを追加

var is_keyboard = false;
var is_landscape = false;
var initial_screen_size = window.innerHeight;

/* Android */
window.addEventListener("resize", function() {
    is_keyboard = (window.innerHeight < initial_screen_size);
    is_landscape = (screen.height < screen.width);

    updateViews();
}, false);

/* iOS */
$("input").bind("focus blur",function() {
    $(window).scrollTop(10);
    is_keyboard = $(window).scrollTop() > 0;
    $(window).scrollTop(0);
    updateViews();
});

これで、ロゴと一部のラインアイテムの表示と非表示を切り替えることができます

function updateViews() {
    $("li").hide();
    if (is_keyboard) {
        $("#logo").hide();
        if (is_landscape) {
            $("li").slice(0, 2).show();
        }
        else {
            $("li").slice(0, 4).show();
        }
    }
    else {
        $("#logo").show();
        $("li").show();
    }
}

このHTMLに基づくJSの場合

<div id="logo">Logo</div>
<input type="text"><input type="submit" value="search">
<ul>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
</ul>

チェックアウト 私のサンプルページ

36
Yoann