输入框在获得焦点的同时,判断如果页面内容高度大于屏幕高度,则进行滚动到页面底部:
onFocus: function () { var sys = wx.getSystemInfoSync() var query = wx.createSelectorQuery() query.select( '.container' ).boundingClientRect( function (res) { if (res && res.height && res.height > sys.windowHeight) { wx.pageScrollTo({ scrollTop: res.height - sys.windowHeight }) } }).exec() } |
此时发现,input组件也跟着页面一起滚动了。input外层有一个view,并且设置为fixed属性bottom=0。
想到一个好办法,基本可以解决问题:
给input外层的view加上 style='position: {{inputPosition}}',view.input是page的直接子元素,记得设置page {position: relative}
默认inputPosition是fixed
当input获得焦点onFocus时,修改inputPosition为absolute
当input失去焦点onBlur时,修改为fixed
这样一来问题得到解决,虽然会导致input不跟随键盘出现速度,当页面滚动完成后,input也差不多上来了,总比错位强得多。