IOS fixed input focus bug

作者: 小奵猫 | 来源:发表于2016-07-29 17:42 被阅读1388次

    最近做微信项目,遇到一个问题,与大家分享一下我的解决方法。

    问题描述:

    fixed布局的输入框在IOS手机的微信内置浏览器上打开,当输入框focus唤起软键盘后,输入框会弹到页面的中间位置,如图:

    问题现象图

    问题原因分析:

    当唤起软件盘之后,position:fixed布局已经失效。

    解决思路:

    既然fixed布局失效,那就不用fixed布局,改用position:absolute布局。

    解决方案:

    我们常规的固定在底部输入框的布局代码

    Html:

    Html

    Css:

    Css

    以下是修改之后的代码:

    Html不需要做任何修改,Css修改如下:

    input container

    添加Js控制container的高度:

    Js

    改变Input的布局,由fixed改为absolute,固定container的高度为浏览器窗口的高度,并添加overflow:scroll属性,将其变为一个scrollview,属性-webkit-overflow-scrolling: touch,是为了让scrollview滑动起来有弹性的效果,ios的微信内置浏览器改变了此属性。

    附上效果图:

    修复bug后的效果图

    如果想查看源代码,点此链接:查看源码

    更新:这样处理在IOS上显示有改善,但是在Android手机上存在问题,简单暴力的绕过方法,还是判断一下终端吧,Android手机上用position:fixed更好。如果有更好的方法,欢迎交流。

    相关文章

      网友评论

      • 风之化身呀:兄弟,这个方案不错,但是输入框还是有概率会被挡在键盘下面(亲测,大概0.2),有更好的方案吗?
        小奵猫:@风之化身呀 在移动端的浏览器上面,没办法获取键盘高度:smile:
        风之化身呀:@豆豆的故事 在IOS11系统上,webview似乎是有bug的,单靠前端js是没法解决的,我们这边借助Native对webview的控制解决了这个问题,大致思路是获取焦点时,让native把webview向上推出一个键盘的高度。
        小奵猫:@风之化身呀 不好意思呀,暂时木有更好的办法了,如果有的话,我会更新上去的,如果你找到更好的办法,欢迎分享啊:grin:

      本文标题:IOS fixed input focus bug

      本文链接:https://www.haomeiwen.com/subject/nfpzjttx.html