Voortgangsindicator met JS en CSS

Hierboven zie je een lichtgrijze balk. Die zit bovenaan het document vastgepind . Als je tijdens het lezen naar beneden scrollt verschijnt daarin een indicator die aangeeft hoeveel van het document je al gezien hebt.

Op deze bladzijde wordt getoond hoe je zoiets maakt. De code van het voorbeeld kun je downloaden om zelf te gebruiken.

Dit is een bewerking van een script dat ik aantrof in Webdesigner Magazine nr. 93 (februari 2017), pag. 24 e.v. Dit blad wordt sinds eind november 2017 niet meer gemaakt.
Het oorspronkelijke script is gemaakt door Jorrit Tinholt en is te vinden op CodePen.

Voor deze site heb ik de code wat gefatsoeneerd en een kleine onvolkomenheid uit het JavaScript gehaald.

Gebruik:

De code van het voorbeeld ziet er als volgt uit:
 
(Zet dit in de <HEAD>).

<link rel="stylesheet" href="styles.css">

(Zet dit net na de <BODY>-tag).

<article class="js-article">
<div class="progress-container">
  <div class="progress-bar js-progress-bar"></div>
</div>

(Zet dit net vóór de </BODY>-tag).

</article>
<script>
var article = document.querySelector('.js-article');
var progressbar = document.querySelector('.js-progress-bar');
 
function getHeight() {
  return article.offsetHeight;  // hoogte van het element in variabele article
};
function getValue() {          // hoever is er gescrolled?
  if (window.scrollY < window.innerHeight/10) { // minder dan 10%
    return 0;
  } else if (window.scrollY < window.innerHeight/5) { // minder dan 20%
    return .2 * getHeight();
  } else if (window.scrollY < window.innerHeight/3) { // minder dan 33%
    return .33 * getHeight();;
  } else {
    return window.innerHeight - (article.offsetTop - window.scrollY);
  }
};
function getPercentage() {
  var percentage = (getValue() / getHeight()) * 100;
  return Math.max(0, Math.min(100, percentage));
};
 
function onScroll() {
  progressbar.style.width = getPercentage() + '%';
}; window.addEventListener('scroll', onScroll);
</script>

Downloaden:
 
Druk op de knop: Download deze code  File: voorb556.zip, 951 bytes.

 
terug

html-556; Laatste wijziging: 29 mei 2020