Итак, я создаю приложение Cordova для iOS / Android с системой чата.
Сохранение позиции прокрутки при добавлении дополнительного содержимого в верхнюю часть div работает правильно для браузеров и Android, но в iOS оно автоматически прокручивается в верхнюю часть всякий раз, когда что-либо добавляется.Я могу обойти это, установив всего лишь тонну таймаутов и установив scrollTop
снова и снова и снова, но невозможно определить, какой из них работает правильно (и, очевидно, между ними есть скачок за доли секунды).
Я использую React, и попытался установить scrollTop в render()
, componentDidUpdate()
и requestAnimationFrame
.Ничто не работает надежно.
В настоящее время у меня есть это в componentDidUpdate, но, похоже, это ужасное решение:
let newScrollTop = this.el.scrollTop
let newHeight = this.el.scrollHeight
let oldHeight = this.lastCalculatedScrollHeight
const heightDelta = newHeight - oldHeight
const heightToScrollTo = newScrollTop + heightDelta
this.el.scrollTop = heightToScrollTo
setTimeout(_ => {
this.el.scrollTop = heightToScrollTo
})
setTimeout(_ => {
this.el.scrollTop = heightToScrollTo
},50)
setTimeout(_ => {
this.el.scrollTop = heightToScrollTo
},100)
setTimeout(_ => {
this.el.scrollTop = heightToScrollTo
},150)
setTimeout(_ => {
this.el.scrollTop = heightToScrollTo
},200)
Кто-нибудь сталкивался с этим раньше?Это сводит меня с ума.