正常登录页面点击输入框获取焦点后,手机的键盘从底部弹出,然后表单应该跟着被顶上去,但是在一些手机自带的浏览器上键盘弹出后表单并没有被顶上去,导致下面的密码输入框被键盘遮挡了。
试过监听window的resize事件,发现键盘弹出后resize事件并未触发,也就是说页面的高度没有变化(innerHeight、clientHeight等等各种Height全试过了),就好像键盘是脱离了浏览器一样。
然后又尝试通过获取焦点来判断键盘弹出,但键盘收起就无法判断,因为如果用户通过点击键盘右上角的收起按钮来收起键盘,输入框并不会失去焦点。而收起按钮又无法捕获到。想知道前端有什么方法可以解决这个问题。
PS:测试的是一加手机,在同一手机的chrome上则正常,表单被顶上去了。测试其他手机时大多数也正常(包括UC),但也有部分手机自带浏览器甚至连chrome都不行。
以安卓开发为例,浏览器通常依靠webview来加载html。
对于软键盘的弹出,有两种模式(可能术语用的不专业,但是意思肯定会讲明)
不同浏览器上的差异,应该是浏览器对于软键盘的弹出模式,设置的不同导致的。
首先,为了尽量避免表单元素被软键盘遮挡,应当尽量避开表单元素出现在下半屏的设计。
其次,如果避免不了此类设计,可以监听表单元素的获取焦点事件,然后提高html整体的高度。其实就是底部,多出一定的高度,预留给软键盘占位。
最后,可能需要监听一下页面的滚动,到了一定的位置(就是实际html的高度),把之前可能增加了的高度给去掉。
能想到的就以上这些了,希望能对你有所帮助。