目前遇到大致分为两种情况
1.iOS出现键盘后,页面不回弹,如下代码可解决(适合大部分情况)
if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') {
return
}
let result = 'pc'
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { // 判断iPhone|iPad|iPod|iOS
result = 'ios'
} else if (/(Android)/i.test(navigator.userAgent)) { // 判断Android
result = 'android'
}
if (result === 'ios') {
// window.scroll(0, document.body.scrollHeight)
// if ('scrollIntoView' in document.activeElement) {
// document.activeElement.scrollIntoView()
// } else {
// document.activeElement.scrollIntoViewIfNeeded()
// }
document.activeElement.scrollIntoViewIfNeeded(true)
}
2.写了以上代码,页面也确实回弹了,但是input输入框重新点击,不会聚焦,可考虑虽然页面回弹了,但是实际上页面的元素,input输入框实际位置并不是我们所看见的位置(点击input没有聚焦,可以再屏幕上任何处多点点,就会发现点击某一处,input聚焦了)
以上的代码可换成以下的语句:
window.scroll(0, document.body.scrollHeight)
3.重新聚焦,以下的代码也是可以使用的
let result = 'pc'
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { // 判断iPhone|iPad|iPod|iOS
result = 'ios'
} else if (/(Android)/i.test(navigator.userAgent)) { // 判断Android
result = 'android'
}
if (result === 'ios') {
window.scroll(0, document.body.scrollHeight)
if ('scrollIntoView' in document.activeElement) {
document.activeElement.scrollIntoView()
} else {
document.activeElement.scrollIntoViewIfNeeded()
}
// document.activeElement.scrollIntoViewIfNeeded(true)
}
使页面聚焦的元素出现在我们的可视区内(页面被键盘顶上去,input输入框不在我们的可视区内)