【问题标题】:jQuery/js/html5 change page content when keyboard is visible on mobile devices [duplicate]当键盘在移动设备上可见时,jQuery / js / html5更改页面内容[重复]
【发布时间】:2012-07-22 11:49:46
【问题描述】:

可能重复:
iPad Web App: Detect Virtual Keyboard Using JavaScript in Safari?

我正在为一个网站构建一个移动版本,如果我可以使用 jQuery/js/html5 或任何其他技术创建在虚拟键盘可见时可以在移动应用程序上制作的相同分屏效果,我很感兴趣.

例如,如果用户进入我的网页并单击输入文本字段,则会显示虚拟键盘,并且浏览器会自动缩放到输入文本字段所在的区域。

我想要的是能够根据新分辨率(屏幕高度 - 键盘高度)在虚拟键盘可见的那一刻更改我的页面内容,方法是移动屏幕顶部的输入文本字段,然后是一些提示取决于用户在文本字段中输入的内容。

这里有一些草图,看看我在说什么:

这是没有键盘的页面视图,基于搜索的结果:

带有纵向键盘的页面,徽标消失,文本输入移到顶部,最多显示 4 个项目

横向键盘页面,logo消失,然后输入移到顶部并被放大,只显示2项

键盘是否隐藏,页面应该进入阶段 1。

希望这会有所帮助。

【问题讨论】:

  • 嘿杜阿贝里!我有点困惑你想从中得到什么——你是想让它根本不放大吗?或者当键盘可见时,您是否试图抓住键盘和顶部之间的屏幕高度?或者您的意思是当键盘可见时,您希望它看起来与您发布的第二个屏幕截图完全相同?
  • @JCole 我想在键盘可见时抓取键盘和顶部之间的屏幕高度。当键盘可见时,我想在第二个屏幕中将项目数量减少到 4,但这也取决于第一个问题,即抓取高度。这是我为了更好地理解问题而给出的一些示例。

标签: javascript jquery html jquery-mobile jquery-events


【解决方案1】:

我已尝试通过捕获 resize 事件来解决您的问题 这样您就可以知道方向和手势是键盘可见

更新:通过LKM solution添加 iOS 移动 safari 支持

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>

查看my example page

【讨论】:

  • 在您的示例中,“徽标”在我开始在搜索框中输入之前不会消失
  • 我用安卓手机测试了chorme和firefox。我没有任何 iOS 设备,所以我看不到这种行为
  • @dstarh 我有 ios 5.1,在我开始输入搜索框并且键盘可见后,徽标没有消失。您能告诉我们您使用的是什么操作系统/浏览器吗?
  • @DoubleYo 感谢您的帮助,并感谢您确认它适用于 chrome/firefox on adroid。似乎在 ios 中显示键盘并不会减小视口大小,因此唯一的解决方案是实现焦点。
  • @DoubleYo 哇 .. 谢谢兄弟。对一些基本的东西有很大帮助。
猜你喜欢
  • 2012-07-05
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多