H5 的input 在安卓键盘弹出后被挡住所引发的

手机端H5的轻应用开发我们总是会遇到很多的兼容性问题,例如苹果系统支持,安卓机器不支持等,而input或者textarea控件在调用键盘的问题上就是如此,苹果的键盘会自动将页面上升,而安卓机器弹出键盘则会挡住界面,相当孤傲,先放解决方法的代码:

if (utils.deviceInfo().isAndroid) {
    setTimeout(function() {
        sender.$el[0].scrollIntoViewIfNeeded(true);
        sender.$el[0].scrollIntoView(true);
    }, 500);
}

1、解释一下代码,首先是判断是安卓的环境,因为测试中发现iOS的机器是没有问题的,所以这里只是处理一下安卓,当然如果部分例如iOS7的机器有问题,可以加多一个判断选项判断版本号

2、然后为什么要加setTimeout延时0.5秒呢,因为调用安卓键盘有一点迟钝,导致如果不延时处理的话,滚动就失效了

3、sender.$el[0],sender其实就是拿到的操作对象,这里自己解析,然后$el这里是zepto 的dom对象,$el[0] 是原生的dom对象

4、现在来解释一下 scrollIntoViewIfNeeded(alignCenter) 和
scrollIntoView(alignWithTop),(1 前者是指:只在当前元素在视窗的可见范围内不可见的情况下,才滚动浏览器窗口或容器元素,最终让当前元素可见。如果当前元素在视窗中可见,这个方法不做任何处理。如果将可选参数alignCenter设置为true,则表示尽量将元素显示在视窗中部(垂直方向), (2 后者:滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素。如果alignWithTop为true,或者省略它,窗口会尽可能滚动到自身顶部与元素顶部平齐。 总结一下,也就是说第一个只是让它可见,而后者是还要到顶部。

5、好啦,很开心,但是要看一下兼容性问题:

scrollIntoViewIfNeeded
scrollIntoView

总体兼容性还可以,因为主要是看安卓(亲测可怕的三星也没问题很开熏啊)和IE(后面支持PC)

你可能感兴趣的:(H5 的input 在安卓键盘弹出后被挡住所引发的)