H5页面软键盘常见问题

1、需求:进入页面自动聚焦输入框,并弹出软键盘浏览器


实测ide

一、经过js执行focus(),安卓下只聚焦,出现光标,不弹出软键盘;IOS下连光标都未出现。函数

二、增长autofocus属性,结果同上。spa

三、将代码放入延迟函数setTimeout 中执行,结果同上。orm

四、经过button点击执行focus(),文本框聚焦且弹出软键盘事件


解决方案:get

一、经过点击屏幕的其余区域,而后触发input的focus事件,唤起键盘:input

进入页面后,给页面加一层遮罩层,点击遮罩层时关闭该层并执行focus()。it

二、重写input输入框及软键盘io


2、问题:当输入信息时弹出软键盘,因手机屏幕有限汪汪会遮住输入框


解决方案:

scrollIntoViewIfNeeded只在当前元素在视窗的可见范围内不可见的状况下才滚动浏览器窗口或容器元素最终让当前元素可见。

当虚拟键盘弹出的时候,window的resize事件会被触发。

监听input元素的focus事件,以及window的resize事件。由于focus事件将在resize事件前触发。而后经过scrollIntoViewIfNeeded使输入框可见。


一、监听input元素的focus事件


var inputs = document.getElementsByTagName("input");
for (var i = 0; i< inputs.length; i++) {
    inputs[i].onclick = function (e) {
        window.setTimeout(function () {
            e.target.scrollIntoViewIfNeeded();
        }, 0);
    }
}



二、监听window的resize事件


if (/Android/gi.test(navigator.userAgent)) {
    window.addEventListener('resize', function () {
        if (document.activeElement.tagName == 'INPUT' || document.activeElement.tagName == 'TEXTAREA') {
            window.setTimeout(function () {
                document.activeElement.scrollIntoViewIfNeeded();
            }, 0);
        }
    })
}
相关文章
相关标签/搜索