-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
60 lines (46 loc) · 1.36 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
const form = document.querySelector('.quiz-form ')
const finalScoreContainer = document.querySelector('.final-score-container')
let score = 0
let counter;
const correctAsnwers = ['B', 'B', 'B', 'B']
const getUserAnswers = () => correctAsnwers.map((_, index) =>
form[`inputQuestion${index + 1}`].value)
// Aqui nao se usa map, filter ou reduce pois aqui esta sendo produzido um efeito colateral
// esta modificando uma let que esta fora do escopo
// o map, filter e reduce nao devem ser usados para efeitos colaterias
const calculateUserScore = userAnswers => {
userAnswers.forEach((userAnswer, index) => {
const isUserAnswerCorrect = userAnswer === correctAsnwers[index]
if(isUserAnswerCorrect) {
score += 25
}
})
}
const showFinalScore = () => {
scrollTo({
top: 0,
left: 0,
behavior: "smooth"
})
finalScoreContainer.classList.remove('d-none')
}
const animateFinalScore = () => {
counter = 0
const timer = setInterval(() => {
if(counter === score) {
clearInterval(timer)
}
finalScoreContainer.querySelector('span').textContent = `${counter++}%`
}, 10)
}
const resetUserScore = () => {
score = 0
}
form.addEventListener('submit', event => {
event.preventDefault()
const userAnswers = getUserAnswers()
resetUserScore()
calculateUserScore(userAnswers)
showFinalScore()
animateFinalScore()
})