首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS7用Javascript检测键盘高度?

iOS7用Javascript检测键盘高度?
EN

Stack Overflow用户
提问于 2013-10-02 22:42:24
回答 1查看 15.4K关注 0票数 17

现在这个问题已经在这里出现了(What is the height of iPad's onscreen keyboard?),但是我认为由于iOS7最近被发布,它需要更新。

问题:,我有一个固定位置模式,出现在页面右下角。它有一个表单字段,在模态打开时获得焦点。焦点触发软键盘打开。问题是,我想通过编程检测键盘高度,将模态定位在键盘顶部,否则部分模态会从视图中被切断。

我尝试过的:

代码语言:javascript
复制
    var scrollHere = currentWidget.offset().top;
    //this scrolls the page to the top of the widget, but the keyboard is below.
    setTimeout(function() {
        $('html, body').scrollTop(scrollHere);
    }, 0);

页面滚动到模式的顶部。不理想,因为有时表单字段隐藏在键盘下面。

我也试过提醒window.innerHeight

代码语言:javascript
复制
    alert(window.innerHeight);

但无论键盘是否可见,结果都是一样的。

所以我的问题是,有没有人找到一种方法来检测iOS7键盘的高度在JavaScript中?有什么解决办法吗?不太可能,但这可能是iOS7 safari中的一个bug吗?

任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-09 13:05:25

所以答案是,我不能检测到window.innerHeight的变化是错误的。

我无法检测到更改的原因是,在iPad上,键盘从底部向上移动,不会触发窗口调整大小事件。我的解决办法不是检测窗口的大小,我让身体的最大高度达到100%,当模态打开时。然后,我等待用户专注于文本字段,并在此时操作滚动位置:

代码语言:javascript
复制
$(document.body).on('focus', '.input-field', function(){
    setTimeout(function(){
         window.scrollTo(0, $('#modalInput').offset().top - 100);
    }, 0);
});

这是当您专注于输入字段时使用的。当键盘打开时,iOS喜欢尝试将窗口集中在字段上,如果在用户需要看到的输入上面有信息,这可能会很烦人。上面的例子滚动窗口,使我的文本字段就在键盘上。你可能会认为这是你所需要做的,但iOS有时会试图变得过于聪明。当用户开始输入输入时,它会重新集中在输入上!所以我们把上面的代码写成这样:

代码语言:javascript
复制
$(document.body).on('focus keyup', '.input-field', function(){
    setTimeout(function(){
         window.scrollTo(0, $('#modalInput').offset().top - 100);
    }, 0);
});

这样,当用户键入时,滚动位置就不会从您想要的位置改变。

备注:我唯一一次能够检测到window.innerHeight中的变化是在on键事件中,因为此时键盘已经完成动画,并在页面上完全显示。在焦点上,它仍然说innerHeight和没有键盘的一样。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19148014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档