解决方案如下:
// 获取焦点方法
function handleFocus(ev) {
if (ev.target.tagName === 'INPUT') {
document.body.style.paddingBottom = '40vh'
setTimeout(() => {
ev.target.scrollIntoView({ behavior: 'smooth', block: 'nearest' })
}, 0)
}
}
// 失去焦点方法
function handleBlur() {
setTimeout(() => {
if (document.activeElement.tagName !== 'INPUT') {
document.body.style.paddingBottom = '0'
}
})
}
// 全局监听
document.documentElement.addEventListener('focus', handleFocus, true)
document.documentElement.addEventListener('blur', handleBlur, true)
onUnmounted(() => {
document.documentElement.removeEventListener('focus', handleFocus, true)
document.documentElement.removeEventListener('blur', handleBlur, true)
})
// 滚动页面将所以输入框失去焦点
document.body.addEventListener('touchmove', () => {
document.activeElement.blur()
handleBlur()
})