IOS下软键盘收起的时候,页面被顶上去,无法复原的终极解决方案

IOS下软键盘收起的时候,页面被顶上去,无法复原的终极解决方案_第1张图片

相信大家在做移动端的页面的时候,会遇到苹果手机下input输入框录入内容的时候,软键盘无法复原的问题,如下:

IOS下软键盘收起的时候,页面被顶上去,无法复原的终极解决方案_第2张图片

这可怎么办?可千万不要用fix定位该页面,这样在IOS下光标会有错位,很恶心。当然,相信很多人会和本屌一样,百度。

网上各种计算软键盘的高度,然后让body去回滚,自己试了下,效果不理想。

怎么办?就只能自己想办法了。后来我发现一个问题,如果这个输入框在页面的顶部, 这时候当软件盘弹出来的时候,页面不会被顶上去,这个就好办了,那我就在页面的顶部放一个input呗。当我的下面的input输入完成,即input 触发onblur事件的时候,让顶部的input 获得焦点。这个时候页面就会正常复原了……(注意顶的input记得控制下样式)整体的demo代码如下:

IOS下软键盘收起的时候,页面被顶上去,无法还原的终极解决方案

*{margin: 0;padding: 0;}

.zmiti-box{

width: 100%;

height: 100%;

position: absolute;;

left: 0;

top: 0;

background: red;

}

.input1{

position: absolute;

top: 50vh;

width: 650px;

left: 50px;

font-size: 32px;

height: 70px;

line-height: 70px;

padding-left: 20px;

box-sizing: border-box;;

}

.zmiti-hide-input{

width: 0;

height: 0;

z-index: -1;

position: absolute;

left: 0;

top: 0;

}

(function(document){

var input1 = document.querySelector('.input1');

var hideInput = document.querySelector('.zmiti-hide-input');

input1.addEventListener('blur',()=>{

hideInput.focus();

setTimeout(()=>{

hideInput.blur();

},10)

});

})(document);

修改后的效果如下:

IOS下软键盘收起的时候,页面被顶上去,无法复原的终极解决方案_第3张图片

最后要注意的是:顶部的input获取焦点的时候,在android下软键盘会弹出,所以当顶部的input获取焦点后,要释放焦点。

完美解决。

写在最后:

android下软键盘弹出会触发window.onresize事件(ios 则不会),页面整个的高度会变小,于是,尤其是在有录入框的页面中,不要使用vh(100vh=页面高度)这样的单位布局,不要用vh,不要用vh, 因为当你的软键盘弹出,你的页面一定会变形,当软盘收起时,页面又正常。(本屌踩过此坑,希望能帮助到大家)

你可能感兴趣的:(IOS下软键盘收起的时候,页面被顶上去,无法复原的终极解决方案)