-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjava.js
165 lines (119 loc) · 5.56 KB
/
java.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
var internalDNDType = 'text/woord'; //Het type van de drag and drop data.
var currentElement; //Het laatst gesleepte element.
var succesCount = 0; //Het aantal goede pogingen.
var total; //Het aantal woorden/afbeeldingen.
var imageContainer; //De DIV waar de afbeeldingen in staan, dit word gebruikt om de eind text te veranderen.
var mistakes = 0; //Het aantal foute pogingen
var scoreboard; //De DIV van het scorebord.
var SoundContainer; //De hidden DIV waar het geluid in wordt afgespeeld.
var bCanPlaySound = true; //Een boolean die aangeeft of er al weer een geluid mag worden afgespeeld, voor een bugfix.
var currentValue = "";
function init() {
scoreboard = document.getElementById('TopscoreBoard'); //De DIV van het scorebord.
SoundContainer = document.getElementById('soundCont'); //De hidden DIV waar het geluid in wordt afgespeeld.
total = document.querySelectorAll(".dragableWord").length; //Het aantal woorden/afbeeldingen.
imageContainer = document.getElementById('afbeeldingwrapper'); //De DIV waar de afbeeldingen in staan, dit word gebruikt om de eind text te veranderen.
/* Hang een eventlistener aan alle dropzones */
var afb = document.querySelectorAll('#afbeeldingwrapper .dropZone');
[].forEach.call(afb, function(imgs) {
imgs.addEventListener('drop', handleDrop, false);
imgs.addEventListener('dragenter', handleDragEnter, false);
imgs.addEventListener('dragover', handleDragOver, false);
imgs.addEventListener('dragleave', handleDragLeave, false);
});
/* Hang een eventlistener aan alle draggable woorden */
var dWords = document.querySelectorAll('.dragableWord');
[].forEach.call(dWords, function(wordd) {
wordd.addEventListener('dragstart', handleDragStart, false);
wordd.addEventListener('dragend', handleDragEnd, false);
//wordd.bind('selectstart', function(){this.dragDrop(); return false;});
//wordd.bind('mousemove', handleDragMouseMove);
});
}
/* De drag start handler */
function handleDragStart(e) {
if (e.target instanceof HTMLLIElement) {
e.dataTransfer.setData(internalDNDType, e.target.dataset.value); //Set het datatype van de drag..
currentValue = e.target.dataset.value;
console.log("CV: "+currentValue);
e.target.style.color = '#FFFFFF'; //Verander de css kleur property van het element.
e.target.style.opacity = '0.4'; //Verander de css opacity(doorzichtigheid) property van het element.
currentElement = e.target; //Set het currentElement variabel(het laatst gesleepte element).
CurrentWord = e.target.innerHTML; //Set het currentWord variabel(het woord van het laatst gesleepte element).
} else {
e.preventDefault(); //Voorkom dat het standaart event word uitgevoerd(text selectie)..
}
}
function handleDragOver(e) {
if (e.preventDefault) {
e.preventDefault(); //Voorkom dat het standaart event word uitgevoerd(de browser redirect).
}
e.dataTransfer.dropEffect = 'move'; //Zet het type drag and drop.
return false;
}
function handleDragEnter(e) {
/* Dummy functie. Wordt misschien nog gebruikt, gebruik nu namelijk de CSS hover. */
}
function handleDragLeave(e) {
/* Dummy functie. Wordt misschien nog gebruikt, gebruik nu namelijk de CSS hover. */
}
/* De drop handler */
function handleDrop(e) {
var data = e.dataTransfer.getData(internalDNDType); //Set het dnd type..
//document.write("eTarget: "+e.target.dataset.value+" Data: "+data
if(e.target.dataset.value.toString() == currentValue) //Als de target index het zelfde is als de source index, is het antwoord goed.
{
succesCount = succesCount + 1; //Tel 1 bij de goede antwoorden op.
e.target.setAttribute("dropzone",""); //Poging om het drop area te disabelen. Werkt niet.
e.target.className = 'dropZoneGOED'; //Verander de class van de droparea DIV.
e.target.innerHTML = "<div class='PlaySoundBut' onClick=SoundPlay('"+currentElement.innerHTML+"');>"+currentElement.innerHTML+"</div>"; //Add het knopje
currentElement.parentNode.removeChild(currentElement); //Verwijder het woord uit de lijst.
if(succesCount == total) //Als alles is ingevuld
{
document.getElementById('einde').innerHTML = "Opdracht klaar, je hebt "+mistakes.toString()+" fouten gemaakt.</br>Klik <a href='javascript:location.reload(true)'>hier</a> om nog een keer te gaan.."; //Verander de content van de einde div
}
}
else // Als het antwoord fout is..
{
var timer=setTimeout(function(){resetText(e.target)}, 1000); //Set een timer
e.target.className = 'dropZoneFOUT';
e.target.innerHTML = "Fout!";
mistakes = mistakes + 1;
}
updateScore();
if (e.stopPropagation) {
e.stopPropagation(); // stops the browser from redirecting.
}
return false;
}
function resetText(currentTarget)
{
currentTarget.className = 'dropZone';
currentTarget.innerHTML = "Sleep het woord hier heen..";
document.selection.empty();
}
function updateScore() {
scoreboard.innerHTML = "<a class=\"text\">"+mistakes+" Fout</a> | <a class=\"text\">"+succesCount+" Goed</a>";
}
/* Bug Fix: Firefox chrashed als je de geluiden te snel achterelkaar afspeelt, er zit nu een delay van 1sec op. */
function resetbSound() {
bCanPlaySound = true;
}
function handleDragEnd(e) {
// this/e.target is the source node.
e.target.style.color = '#000000';
e.target.style.opacity = '1';
}
function handleDragMouseMove(e) {
var target = e.target;
if (window.event.button === 1) {
target.dragDrop();
}
}
function SoundPlay(FileName) {
if(bCanPlaySound){
SoundContainer.innerHTML = "<embed src='res/"+FileName+".mp3' hidden=true autostart=true loop=false />";
}
bCanPlaySound = false;
var timer=setTimeout(function(){resetbSound()}, 1000);
}