-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
115 lines (104 loc) · 4.31 KB
/
app.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
// niz objekata od kojih svaki predstavlja jedno pitanje
// u realnoj aplikaciji, dobili bi ga u JSON formatu (AJAX pozivom ka serveru)
const pitanja = [
{
// tekst pitanja
pitanje: "Ko je osnivač kompanije <em>Apple</em>?",
// ponudjeni odgovori
odgovori: {
a: "Bil Gejts",
b: "Ilon Maks",
c: "Stiv Džobs"
},
// koji on ponudjenih odgovora je tacan
tacanOdgovor: "c"
},
{
pitanje: "Kako se zvala prva programerka? Jedan progamski jezik nosi njeno ime.",
odgovori: {
a: "Ada Bajron",
b: "Karmen Elektra",
c: "Java Script"
},
tacanOdgovor: "a"
},
{
pitanje: "Kako se zove čuveni naučnik o kome govori film <em>The Immitation Game</em> ",
odgovori: {
a: "Nikola Tesla",
b: "Alen Tjuring",
c: "Tomas Edison"
},
tacanOdgovor: "b"
}
];
const kvizDiv = document.getElementById('kviz'); // div za prikaz pitanja i ponudjenih odgovora
const rezultatDiv = document.getElementById('rezultat'); // div za prikaz rezultata
const zavrsiBtn = document.getElementById('zavrsi'); // dugme za zavrsavanje kviza
// metod koji se poziva da bi se prikazala pitanja i ponudjeni odgovori
function pokreniKviz(){
// niz koji popunjavamo tekstom pitanja i ponudjenim odgovorima
// niz ce sadrzati HTML elemente
const output = [];
// prolazimo petljom kroz sve elemente niza pitanja
// uzimamo pitanje koje je aktuelno u trenutnoj iteraciji i njegov indeks
pitanja.forEach(function(trenutnoPitanje, pitanjeInd){
// niz koji cemo popuniti odgovorima na trenutno pitanje
const odgovori = [];
// petlja koja prolazi svim odgovorima trenutnog pitanja
for(slovo in trenutnoPitanje.odgovori){
// u niz odgovora dodajemo HTML kod za prikaz ponudjenog odgovora
// inputi za odgovor na isto pitanje moraju imati isti name atribut
// odradjujemo da svaki od njih ima name="odogovor"+indeks_trenutnog_pitanja
// na taj nacin ce svi ponudjeni odgovori na pitanje sa indeksom 1 imati name="odgovor1"
// vrijednost odgovora je upravo ono slovo pod kojim je on i ponudjen
// tekst je oblika: " a : tekst_odgovora "
odgovori.push(
`<label>
<input type="radio" name="odgovor${pitanjeInd}" value="${slovo}" >
${slovo} : ${trenutnoPitanje.odgovori[slovo]}
</label>`
);
}
// na kraju u output niz koji sadrzi sva pitanja i ponudjene odgovore dodajemo trenutno
// trenutnoPitanje.pitanje je tekst pitanja
// funkcija join od niza pravi string
output.push(
`
<div class="pitanje">${trenutnoPitanje.pitanje}</div>
<div class="odgovori"> ${odgovori.join('')} </div>
`
);
});
// na kraju popunjavamo div za prikaz pitanja i odgovora
kvizDiv.innerHTML = output.join('');
}
// funkcija koja se poziva na klik dugmeta za zavrsavanje kviza
// provjerava koliko je igrac imao tacnih odgovora
function prikaziRezultat(){
// na samom pocetku nije imao tacnih odgovora
let brTacnih = 0;
// prolazimo kroz globalni niz svih pitanja
// tu poredimo odgovor koji je igrac dao na to pitanja sa tacnim odgovorom pitanja
pitanja.forEach(function(trenutnoPitanje, pitanjeInd){
// selektor koji trazi cekirani input na trenutno pitanje
const selektor = `input[name=odgovor${pitanjeInd}]:checked`;
// igrac je odgovorio ono sto je vrijednost cekiranog input-a (radio button-a)
const odgovoreno = (document.querySelector(selektor) || {} ).value;
// ako je ono sto je igrac odgovorio jednako tacnom odgovoru na trenutno pitanje
// to znaci da je igrac tacno odgovorio i povecavamo ukupan broj tacnih odgovora
if(odgovoreno === trenutnoPitanje.tacanOdgovor){
brTacnih++;
}
});
// na kraju samo popunjavamo div za prikaz rezultata
rezultatDiv.innerHTML = `rezultat: <h3>${brTacnih} od ${pitanja.length}</h3>`;
}
// na ucitavanje stranice, pozivamo metod za prikaz(pocetak) kviza
pokreniKviz();
// na dugme za zavrsavanje dodajemo listener koji na klik pokrece kraj kviz i racuna ucinak
zavrsiBtn.addEventListener('click', prikaziRezultat);
/* DOMACI ZADATAK 2 */
// 1. tekst pitanja dobija crvenu(ako je korisnik odgovorio netacno)
// ili zelenu (ako je korisnik odgovorio tacno) boju
// 2. postaviti tajmer da se automatski zavrsi kviz nakon 60 sekundi