javascript - HTML 文本输入打破了 Iphone 6/7 plus 上的定位

标签 javascript html ios

我试图找到一些解决移动 safari bug 的方法:

例如我有一个清晰的html页面

  1. 视口(viewport)设置 width=device-width, noscalable
  2. 正文位置:固定
  3. 两个由 js 创建并放置在屏幕中央的 HTMLInputs

在所有设备上一切正常,但在 Iphone 6 plus 和 7 plus 上我们遇到了一个大问题:

如果我获得焦点输入然后隐藏键盘,所有窗口定位都会偏离渲染位置。只有当我点击它可见位置高 ~100px 时,输入才会被聚焦。此外,页面上的每个附加元素(即使是带有 webgl 内容的 Canvas )也会在每次点击/触摸启动等时得到错误的坐标。

我已连接 iphone 进行调试,我可以看到浏览器认为输入不在它呈现的位置。我也可以用手指垂直滚动页面,真实的渲染输入将留在原地,但浏览器的区域将上下移动到他的渲染位置。 enter image description here

只有在浏览器中横向打开几个选项卡时才能重现错误(我将在屏幕截图中以红色突出显示选项卡)。

在iphones5-6上无法复现,因为没有tabs,在ipad上也无法复现,有相同的tabs。

示例在这里:http://baker-feather-16713.bitballoon.com/

最佳答案

问题是,如果您将 html/body 宽度和高度设置为 100%,safari 允许用户将页面滚动到全屏。因此,当键盘显示内容向上滚动时,尽管主体的位置是“固定的”,并且当键盘隐藏时它会呈现错误。

解决方案很简单:只需要​​在隐藏键盘时执行 scrollTo(0, 0) 即可,例如:

document.addEventListener('focusout', function(e) { window.scrollTo(0, 0) });

关于javascript - HTML 文本输入打破了 Iphone 6/7 plus 上的定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42857403/

相关文章:

iOS 自定义 View 或导航栏 Controller

javascript - 如何将 Spine 动画添加到 Phaser 游戏?

javascript - 我如何使用回车键来提交用户名和密码

javascript - 如何利用鼠标悬停效果来改变背景颜色?

javascript - 删除所有没有属性的元素

iphone - 如何在iPhone中后台播放多首歌曲

ios - 如何使用 NSKeyedArchiver(或其他机制)以 XML 格式将自己的类列表保存在 plist 中?

javascript - JSlint - 'function' 在定义之前已被使用'

javascript - AJAX 调用 PHP 文件 : return value is empty

javascript - 如何在 Knockout JS 中强制应用绑定(bind)