Hallo iedereen,
Ik ben nu al een tijdje bezig aan een oefening en er zit een foutje in die ikzelf maar niet kan zijn en waarbij ik wel wat hulp kan gebruiken. Het programma'tje zit als volgt in elkaar
HTML:
In de html mag (zoals je kan zien) niets gewijzigd worden. Alles dient dus gemaakt te worden met Javascript.
Nu wat is de bedoeling, allereerst krijg ik drie arrays met daarin data rond de afgelopen verkiezingen in België. Het eerste punt in het programmatje is met Javascript een tabel opmaken met daarin mooi de waardes van die arrays. Maar daarnaast is het ook de bedoeling dat er onder de tabel een grafiek wordt gemaakt adhv de data uit die arrays (dus bijvoorbeeld de partij NVA heeft 345000 stemmen, voor de grafiek maken we dan een div in de kleur geel (een rechtopstaande balk dus) in verhouding met al de rest van de stemmen.
Klik je op zo'n balkje? Dan krijg je een div boven de grafiek te zien in hetzelfde kleurtje als de balk met daarin het aantal stemmen (de opacity van die div moet dus omhoog).
Het grootste deel van dit programma is mij al gelukt maar als ik het percentage wil tonen in de div boven de grafiek loop ik vast met de error (uncaught typeerror: undefined is not a function). Meer bepaald bij volgend stukje code:
Weet er iemand hoe dit euvel kan opgelost worden, het is waarschijnlijk iets heel doms. Maar ik kijk er jammer genoeg over.
Alvast bedankt op voorhand aan diegene die dit kan vinden!
Cédric Boetens
Ik ben nu al een tijdje bezig aan een oefening en er zit een foutje in die ikzelf maar niet kan zijn en waarbij ik wel wat hulp kan gebruiken. Het programma'tje zit als volgt in elkaar
HTML:
HTML:
<!doctype html>
<!-- In dit bestand mag niets gewijzigd / toegevoegd / verwijderd worden -->
<html lang="nl">
<head>
<meta charset="UTF-8">
<title>Verkiezingen 2014</title>
<script src="verkiezingen.js"></script>
<link rel="stylesheet" href="verkiezingen.css"/>
</head>
<body>
<!-- In dit bestand mag niets gewijzigd / toegevoegd / verwijderd worden -->
<table></table>
<div id="percentage"></div>
<div id="grafiek"></div>
<!-- In dit bestand mag niets gewijzigd / toegevoegd / verwijderd worden -->
</body>
</html>
In de html mag (zoals je kan zien) niets gewijzigd worden. Alles dient dus gemaakt te worden met Javascript.
Code:
/*
*
* Naam: Cédric Boetens
* Groep: 1NMCT1
*
*/
arrPartijen = new Array("Partijen","Groen","Vlaams Belang","OpenVld","U F","sp.a","N-VA","CD&V","PVDA+","Andere");
var arr14 = new Array(2014,365779,248840,594464,34741,587901,1339943,860685,106114,63968);
var arr09 = new Array(2009,278211,628564,616610,47319,627852,537040,939873,42849,394007);
var totaal14 = 4266403;
var table, grafiek, percentage;
var intervalleke;
//Function Init start
window.addEventListener('load',init, false);
function init(){
console.log("init initiated...")
table= document.getElementsByTagName('table')[0];
grafiek= document.getElementById('grafiek');
percentage= document.getElementById('percentage')
maakTabel();
maakGrafiek()
}
function maakTabel(){
console.log("making table...");
maakRij(arrPartijen);
maakRij(arr09);
maakRij(arr14);
}
function maakRij(arr){
//Maak voor iedere array een aparte tablerow aan
var tr= document.createElement("tr");
//In de tableheading wordt nu het eerste element uit de ingelezen array getoond
tr.innerHTML= "<th>" + arr[0] + "</th>";
for(var i=1; i < arr.length; i++){
//Nu wordt voor iedere array de gegevens ingelezen om ze in de tabel te plaatsen.
tr.innerHTML= tr.innerHTML + "<td>" + arr[i] + "</td>";
}
table.appendChild(tr);
}
function maakGrafiek(){
console.log("making graph...");
// Schrijf hier de code om de grafiek aan te maken.
// De grafiek bestaat uit divs met een hoogte gelijk aan het aantal stemmen gedeeld door 5000.
// De breedte van elke balk is 50px.
// De divs in de grafiek zijn reeds gepositioneerd door de CSS, maar hebben nog een left positie nodig.
// Voor de kleur zijn er in de CSS klasses voorzien.
// Zorg ook voor een attribuut 'data-value' het aantal stemmen van de partij bevat.
// Bij het klikken op een balk wordt het percentage dat een partij gescoord heeft,
// getoond in de percentage div.
for(var i= 1; i< arrPartijen.length; i++){
//div
var div= document.createElement("div");
//Breedte van elke balk is 50px;
div.style.width= '50px';
//De hoogte = het aantal stemmen van de partij / 5000
div.style.height= Math.floor(parseInt(arr14[i]/5000)) + 'px';
div.style.left= 60*(i+1) + 'px';
//Attribuut data-value met daarin de stemmen
div.setAttribute("data-value",arr14[i]);
console.log(div.getAttribute("data-value"));
//Plaats hier de code voor de classname
div.className= arrPartijen[i].substr(0,1).toLowerCase();
grafiek.appendChild(div);
console.log("hier zijn we toch al");
//als er op de balk geklikt wordt moet de score erboven komen in div
if(div.addEventListener){
//verwijzing naar de functie toonpercentage
div.addEventListener('click',toonPercentage(),false);
}
}
function toonPercentage(){
// Indien het percentage wordt getoond, moet de opacity van de percentagediv eerst op 0 gezet worden.
// Nadien moet de div getoond worden door de opacity te verhogen door een timer.
// De achtergrond van de div wordt dezelfde als die van de partij waarop geklikt werd.
var balkje = getTargetElement(this);
console.log(balkje);
if (balkje.id !== "grafiek") {
percentage.className = balkje.className;
var pct = parseInt(balkje.getAttribute("data-value"));
pct += pct / totaal14 * 100;
pct = pct.toFixed(2);
percentage.innerText = pct + '%';
percentage.style.opacity = 0;
intervalleke = window.setInterval(makeVisible, 50);
} else {
percentage.className = "";
percentage.innerHTML = "";
}
}
}
function makeVisible(){
var currentOpacity = percentage.style.opacity;
var newOpacity= parseFloat(currentOpacity) + 0.05;
percentage.style.opacity= newOpacity;
if(newOpacity > 1.0){
window.clearInterval(intervalleke);
}
}
function getTargetElement(evt) {
if (evt.target && typeof(evt.target) !== "undefined") {
return evt.target;
} else {
evt = window.event; //global event in IE
return evt.srcElement;
}
}
Nu wat is de bedoeling, allereerst krijg ik drie arrays met daarin data rond de afgelopen verkiezingen in België. Het eerste punt in het programmatje is met Javascript een tabel opmaken met daarin mooi de waardes van die arrays. Maar daarnaast is het ook de bedoeling dat er onder de tabel een grafiek wordt gemaakt adhv de data uit die arrays (dus bijvoorbeeld de partij NVA heeft 345000 stemmen, voor de grafiek maken we dan een div in de kleur geel (een rechtopstaande balk dus) in verhouding met al de rest van de stemmen.
Klik je op zo'n balkje? Dan krijg je een div boven de grafiek te zien in hetzelfde kleurtje als de balk met daarin het aantal stemmen (de opacity van die div moet dus omhoog).
Het grootste deel van dit programma is mij al gelukt maar als ik het percentage wil tonen in de div boven de grafiek loop ik vast met de error (uncaught typeerror: undefined is not a function). Meer bepaald bij volgend stukje code:
HTML:
function toonPercentage(){
// Indien het percentage wordt getoond, moet de opacity van de percentagediv eerst op 0 gezet worden.
// Nadien moet de div getoond worden door de opacity te verhogen door een timer.
// De achtergrond van de div wordt dezelfde als die van de partij waarop geklikt werd.
var balkje = getTargetElement(this);
console.log(balkje);
if (balkje.id !== "grafiek") {
percentage.className = balkje.className;
[B]var pct = parseInt(balkje.getAttribute("data-value"));[/B] --> uncaught type-error: undefined is not a function.
pct += pct / totaal14 * 100;
pct = pct.toFixed(2);
percentage.innerText = pct + '%';
percentage.style.opacity = 0;
intervalleke = window.setInterval(makeVisible, 50);
} else {
percentage.className = "";
percentage.innerHTML = "";
}
}
}
Weet er iemand hoe dit euvel kan opgelost worden, het is waarschijnlijk iets heel doms. Maar ik kijk er jammer genoeg over.
Alvast bedankt op voorhand aan diegene die dit kan vinden!
Cédric Boetens