-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
197 lines (170 loc) · 6.88 KB
/
script.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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
// Variáveis globais para o teste de visão
let correctAnswers = 0;
let incorrectAnswers = 0;
let currentLetter = '';
let currentColor = '';
let timeLeft = 10;
let timerInterval;
let mode = 'practice'; // Modo padrão
let isTimedMode = false;
let totalQuestions = 10; // Definimos o número de perguntas para o resumo final
let questionsAnswered = 0;
let testEnded = false; // Flag para impedir novas respostas até reiniciar
// Função para compartilhar no Facebook
function shareOnFacebook() {
const url = encodeURIComponent(window.location.href);
window.open(`https://www.facebook.com/sharer/sharer.php?u=${url}`, '_blank');
}
// Função para compartilhar no Twitter
function shareOnTwitter() {
const url = encodeURIComponent(window.location.href);
const text = encodeURIComponent('Confira este teste de visão!');
window.open(`https://twitter.com/intent/tweet?url=${url}&text=${text}`, '_blank');
}
// Função para compartilhar no WhatsApp
function shareOnWhatsApp() {
const url = encodeURIComponent(window.location.href);
const text = encodeURIComponent('Confira este teste de visão!');
window.open(`https://api.whatsapp.com/send?text=${text}%20${url}`, '_blank');
}
// Função para salvar como PDF usando a biblioteca html2pdf
function saveAsPDF() {
const element = document.querySelector('.container');
html2pdf(element, {
margin: 1,
filename: 'teste_visao.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' }
});
}
// Função para gerar uma nova letra e cor aleatórias
function nextLetter() {
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const colors = ['red', 'yellow', 'green'];
currentLetter = letters.charAt(Math.floor(Math.random() * letters.length));
currentColor = colors[Math.floor(Math.random() * colors.length)];
const letterElement = document.getElementById('letter');
letterElement.textContent = currentLetter;
letterElement.style.color = currentColor;
// Exibe a div da letra
letterElement.style.display = 'block'; // Torna visível a div da letra
// Reinicia o temporizador no modo cronometrado
if (isTimedMode) {
timeLeft = document.getElementById('timeSelect').value;
document.getElementById('timer').textContent = `Tempo restante: ${timeLeft}s`;
clearInterval(timerInterval);
timerInterval = setInterval(countdown, 1000);
}
}
// Função para verificar a resposta do usuário
function submitAnswer() {
if (testEnded) return; // Impede a continuação após 10 perguntas
const userInput = document.getElementById('userInput').value.toUpperCase();
const feedbackElement = document.getElementById('feedback');
// Verifica se o usuário escolheu uma cor
const selectedColor = document.querySelector('input[name="color"]:checked');
if (!selectedColor) {
feedbackElement.textContent = 'Por favor, selecione uma cor.';
feedbackElement.style.color = 'orange';
return;
}
const userColor = selectedColor.value;
// Verificação da resposta da letra e da cor
if (userInput === currentLetter && userColor === currentColor) {
feedbackElement.textContent = 'Correto!';
feedbackElement.style.color = 'green';
document.getElementById('correctSound').play();
correctAnswers++;
} else {
feedbackElement.textContent = `Incorreto! A letra era ${currentLetter} e a cor era ${currentColor}.`;
feedbackElement.style.color = 'red';
document.getElementById('incorrectSound').play();
incorrectAnswers++;
}
questionsAnswered++;
// Verifica se o número de perguntas foi atingido
if (questionsAnswered >= totalQuestions) {
displaySummary();
testEnded = true; // Impede novas respostas
} else {
// Limpa o campo de input e prepara a próxima letra
document.getElementById('userInput').value = '';
clearInterval(timerInterval); // Para o temporizador
nextLetter(); // Gera a próxima letra e cor
}
// Atualiza a pontuação
document.getElementById('score').textContent = `Pontuação: ${correctAnswers} corretas, ${incorrectAnswers} incorretas`;
}
// Função para exibir o resumo final
function displaySummary() {
document.querySelector('.summary').style.display = 'block';
document.getElementById('correctAnswers').textContent = `Respostas Corretas: ${correctAnswers}`;
document.getElementById('incorrectAnswers').textContent = `Respostas Incorretas: ${incorrectAnswers}`;
document.getElementById('feedback').textContent = '';
clearInterval(timerInterval); // Para o temporizador
}
// Função para definir a dificuldade
function setDifficulty() {
const difficulty = document.getElementById('difficulty').value;
const letterElement = document.getElementById('letter');
// Ajusta o tamanho da letra e o desfoque com base na dificuldade
switch (difficulty) {
case 'easy':
letterElement.style.fontSize = '100px';
letterElement.style.filter = 'blur(0px)';
break;
case 'medium':
letterElement.style.fontSize = '70px';
letterElement.style.filter = 'blur(2px)';
break;
case 'hard':
letterElement.style.fontSize = '50px';
letterElement.style.filter = 'blur(4px)';
break;
case 'veryHard':
letterElement.style.fontSize = '40px';
letterElement.style.filter = 'blur(6px)';
break;
}
}
// Função para definir o modo de jogo
function setMode() {
mode = document.getElementById('mode').value;
isTimedMode = mode === 'timed'; // Verifica se o modo é cronometrado
if (!isTimedMode) {
clearInterval(timerInterval); // Para o temporizador no modo de treinamento
document.getElementById('timer').textContent = 'Modo de Treinamento';
} else {
nextLetter(); // Reinicia a letra e o temporizador no modo cronometrado
}
}
// Função para atualizar o display do tempo por letra
function updateTimeDisplay() {
const time = document.getElementById('timeSelect').value;
document.getElementById('timeDisplay').textContent = `${time}s`;
}
// Função para contar o tempo no modo cronometrado
function countdown() {
timeLeft--;
document.getElementById('timer').textContent = `Tempo restante: ${timeLeft}s`;
if (timeLeft <= 0) {
clearInterval(timerInterval);
submitAnswer(); // Submete a resposta automaticamente quando o tempo acaba
}
}
// Função para reiniciar o teste
function restartTest() {
correctAnswers = 0;
incorrectAnswers = 0;
questionsAnswered = 0;
testEnded = false; // Permite que o teste continue após reiniciar
document.getElementById('score').textContent = 'Pontuação: 0 corretas, 0 incorretas';
document.getElementById('feedback').textContent = '';
document.querySelector('.summary').style.display = 'none';
nextLetter(); // Reinicia o teste com uma nova letra e cor
}
// Inicializa o teste assim que a página carrega, gerando a primeira letra e cor aleatórias sem atraso
window.onload = function() {
nextLetter(); // Chama a função nextLetter() ao carregar a página
};