分析原因:
软键盘调起引起viewport高度变化,进而影响到了滚动区域容器的高度。容器高度变了,而容器content的scrollTop没变化,表现为原再视图底部的界面被隐藏了,看起来就像是软键盘把它挡住了。
解决方法:
给滚动区域的每一个input标签添加focus监听事件,用以记录当前所操作的input元素。当viewport变化时,window.onresize触发,这时使用better-scroll的scrollToElement方法,使内容滚动到当前操作的input的位置,最好是延时100ms以上开始滚动。
this.scroll.on("refresh", () => { //better-scroll刷新时,input标签可能会有变化,所以重新给input添加focus监听事件
const inputs = this.$refs["content"].querySelectorAll("input");
inputs.forEach(el => {
el.removeEventListener("focus", this.fn)
el.addEventListener("focus", this.fn)
});
})
window.onresize = () => {
setTimeout(() => {
this.scroll.scrollToElement(this.input, 300, 0, -20)
}, 200)
}