Я пытаюсь реализовать индикатор выполнения, показывающий, насколько близко вы находитесь к концу страницы в ванильном JavaScript. Однако я столкнулся с несколькими проблемами.
Прежде всего, хотя элемент body
прокручивается, document.body.scrollTop
всегда возвращает 0
.Я разобрался с этим с помощью document.scrollingElement.scrollTop
.
. Прошло много времени с тех пор, как я в последний раз реализовал подобную функцию, поэтому я перешел к Stack Overflow и нашел этот поток , который пробежалнемного памятиИз того, что я помню в прошлый раз, когда я реализовал эту функцию, формула должна выглядеть примерно так, как было упомянуто в этой теме:
const progressBar = document.getElementById('footer__progress_bar')
const totalValue = document.body.scrollHeight - window.innerHeight
document.body.onscroll = () => {
let currentValue = document.scrollingElement.scrollTop
let offset = (currentValue / totalValue) * 100 - 100 + '%'
progressBar.style.left = offset
}
К сожалению, что-то не так с приведенным выше сценарием, и я могу 'Кажется, я не понимаю, что это такое.По какой-то причине значение offset
превышает (а иногда и не достигает) отметку.Я создал CODEPEN , и проблема с перерегулированием сохраняется, поэтому кажется, что проблема заключается в самой формуле.Тем не менее, когда я смотрю на числа (window.innerHeight, body.scrollTop и т. Д.), Ни одно из них, похоже, не складывается.Ниже приведены цифры.
window.innerHeight ..................... 779
document.body.clientHeight ............ 3210
document.body.offsetHeight ............ 3212
document.body.scrollTop .................. 0
document.scrollingElement.scrollTop ... 2646
Я также заметил супер странное поведение.document.body.clientHeight
и document.body.offsetHeight
будут случайным образом изменять значения, когда я обновляю страницу, так что они почти постоянно скачут назад и вперед с X to Y
.
Примечательно, что сам элемент body имеет height
auto
и без вертикальных полей, хотя некоторые из его детей имеют вертикальные поля.Элемент main
, куда я встраиваю все из базы данных, также имеет height: auto
, но он также возвращает 0
, когда я проверяю его scrollTop
.
Кто-нибудьесть идеи, где я иду не так или почему цифры не складываются?