Dobrych praktyk UX nigdy za wiele. Warto czasami do strony dodać coś co nawet w najmniejszym stopniu zwiększy czas przebywania usera na stronie.
Najpierw pobieramy o ile przewinęliśmy stronę od lewego górnego rogu window.pageYOffset,
później pobieramy wysokość okna bez uwzględniania toolbarów i scrollbarów window.innerHeight, następnie pobieramy document.body.clientHeight czyli wysokość całego okna.
const ProgressBar = function () {
window.addEventListener('scroll', () => {
let ws = window.pageYOffset,
wh = window.innerHeight,
dh = document.body.clientHeight;
let scrollPercent = (ws / (dh-wh)) * 100;
const progressBar = document.querySelector('#progress');
if(ws > 50) {
progressBar.setAttribute('style','width:'+ scrollPercent + '%');
} else {
progressBar.removeAttribute('style');
}
});
}();
Jeżeli przewiniemy o więcej niż 50px wtedy do id progress dodajemy style width, jeżeli jest mniejsze to usuwamy atrybut style z id.
Dodajemy też css aby to zadziałało.
.bar {
position: fixed;
background: rgb(255, 0, 0);
height: 10px;
width: 0;
top: 0;
}
Działający przykład znajduje się tutaj