Staafdiagrammen met animatie

In het item Staafdiagrammen wordt getoond hoe je met betrekkelijk eenvoudige middelen een staaf- of kolomdiagram op kunt zetten. Daar zit ook een applicatie bij om zo'n diagram te genereren.

Op deze pagina wordt code gepresenteerd die hetzelfde doet voor een staafdiagram, maar met een animatie die wordt getriggerd door aanwijzen met de muis of door aanraken.

Als je de code van zo'n diagram bekijkt blijkt er vaak helemaal geen ingewikkelde grafische representatie te zijn, alleen maar wat kleine .GIF-bestandjes. Elk van die bestandjes bevat een plaatje van één of hooguit een paar pixels; elk plaatje bevat één kleur.

De hier besproken code kun je downloaden voor eigen gebruik, inclusief de plaatjes.

Gebruik:

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

<script>
const waarden = [3,2,2,4,1,7],
  beschrijving = ["Mooi","Handig","Nuttig",
   "Leuk","Weet ik niet","Overbodig"];
const staafBreedte = 15;, maxLengte = 220;

/* ==== Hieronder niet meer wijzigen ==== */
const aantalWaarden = waarden.length;
let totaalWaarden = 0, maxWaarde = 0;
window.addEventListener('load', function() {
// Bepaal de som en de hoogste van waarden[]
  waarden.forEach(somWaarden);
 
  for (let i=0; i<aantalWaarden; i++) { // Toon de percentages na de balk
    toonWaarde(i);
    toonStaaf(i);
    toonPercentage(i);
  }
  document.getElementById('totalen').innerHTML =
    '<b>' + totaalWaarden + '</b>';
 
  if ("ontouchstart" in document.documentElement) {  // Aanraakscherm?
    for (let i=0; i<aantalWaarden; i++)
      document.getElementById('staaf'+i).addEventListener('click',function()
        {percentage100(i)});
  } else {
    for (let i=0; i<aantalWaarden; i++) {
      document.getElementById('staaf'+i).addEventListener('mouseover',
        function() {percentage100(i)});
      document.getElementById('staaf'+i).addEventListener('mouseout',
        resetPercentages);
    }
  }
});  // event Load
 
function somWaarden(item) {
  totaalWaarden += item;
  if (item > maxWaarde) maxWaarde = item;
}  // somWaarden

function toonWaarde(n) {
  document.getElementById('wrde'+n).innerText =
    beschrijving[n] + " " + waarden[n];
}  //toonWaarde
 
function toonStaaf(n) {
  document.getElementById('stl'+n).style.height =
    staafBreedte + "px";
  document.getElementById('stl'+n).style.width =
    waarden[n] / maxWaarde * maxLengte + "px";
}  //toonStaaf
 
function toonPercentage(n) {
  let helper = waarden[n] / totaalWaarden * 100;
  document.getElementById('perc'+n).innerText =
    helper.toFixed(1) + "%";
}  // toonPercentage
 
function percentage100(n) {
  let helper = 0.;
  for (let i=0; i<aantalWaarden; i++) {
    if (i == n || waarden[i] == waarden[n]) {
      helper = 100;
      document.getElementById('perc'+i).innerText =
        helper.toFixed(1) + "%";
    } else {
      helper = (waarden[i] - waarden[n]) / waarden[n] * 100;
      if (helper < 0) document.getElementById('perc'+i).innerText =
        helper.toFixed(1) + "%";
      else document.getElementById('perc'+i).innerText =
        "+" + helper.toFixed(1) + "%";
    }
  }
}  // percentage100
 
function resetPercentages() {
  for (let i=0; i<aantalWaarden; i++) toonPercentage(i);
}  // resetPercentages
</script>

(Zet dit in de <BODY> op de plaats waar het diagram moet verschijnen)

<div align="center">
<table border="1" cellspacing="1" cellpadding="2" bgcolor="#ddeeff"
  width="90%"><tr>
<td style="background-color:#5588cc; text-align:center; color:#fff">Geef
  uw mening!</td>
</tr><tr>
<td>
<table border="0" cellpadding="2" cellspacing="0" width="100%"><tr>
<td colspan="4" align="center"><b>Wat vindt u van deze site? [totaal
  <span id="totalen">??</span> stemmen]</b></td>
</tr><tr>
<td colspan="4">&nbsp;  <!--  Lege regel  --></td>
</tr><tr align="left" valign="top">
<td id="wrde0">??</td><td>&nbsp;</td>
<td id="staaf0"><img src="pixel-1.gif" id="stl0">&nbsp;
  <span id="perc0">??</span></td><td>&nbsp;</td>
</tr><tr align="left" valign="top">
 
  // Voor elke staaf herhalen
 
<td id="wrde5">??</td><td>&nbsp;</td>
<td id="staaf5"><img src="pixel-6.gif" id="stl5">&nbsp;
  <span id="perc5">??</span></td><td>&nbsp;</td>
</tr></table>
</tr></table><br>
Voorbeeld van een Staafdiagram.
</div>

Downloaden:
 
Druk op de knop: Download deze code  File: voorb825.zip, 2586 bytes.

Opmerking:
 
Een versie voor kolomdiagrammen is te vinden het item Kolomdiagrammen met animatie.

 
terug

html-825; Laatste wijziging: 27 maart 2026