-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
87 lines (80 loc) · 4.15 KB
/
script.js
File metadata and controls
87 lines (80 loc) · 4.15 KB
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
// dentro del script.js
// todas nuestros textos de ejemplo
const textos = [
'When you have eliminated the impossible, whatever remains, however improbable, must be the truth.',
'There is nothing more deceptive than an obvious fact.',
'I ought to know by this time that when a fact appears to be opposed to a long train of deductions it invariably proves to be capable of bearing some other interpretation.',
'I never make exceptions. An exception disproves the rule.',
'What one man can invent another can discover.',
'Nothing clears up a case so much as stating it to another person.',
'Education never ends, Watson. It is a series of lessons, with the greatest for the last.',
];
// almacena la lista de palabras y el índice de la palabra que el jugador está escribiendo actualmente
let palabras = [];
let palabraIndice = 0;
// la hora de inicio
let startTime = Date.now();
// elementos de la pagina
const textoElemento = document.getElementById('quote');
const messageElement = document.getElementById('message');
const typedValueElement = document.getElementById('texto-tipeado');
// en el final de nuestro archivo script.js
document.getElementById('inicio').addEventListener('click', () => { /*del documento toma el elemento que tiene el id inicio y agregale un escuchador para captar cada vez que el usuario haga click entonces cuando el java detecte que el usuario hace click va a ejecutra toda la funcion que esta dentro de la llave, con el parentesis y la flechita le decimos que todo lo que esta dentro de las llaves es una funcion */
// elegimos el texto de ejemplo a mostrar
const textoIndice = Math.floor(Math.random() * textos.length);
const texto = textos[textoIndice];
// separamos el texto en un array de palabras
palabras = texto.split(' ');
// reestablemos el idice de palabras para el seguimiento
palabraIndice = 0;
// Actualizamos la interfaz de usuario
// Creamos una matriz con los elementos span de nuestro HTML para poder definirles una class
const spanPalabras = palabras.map(function(palabra) { return `<span>${palabra} </span>`});
// Convertimos a string y lo definimos como innerHTML en el texto de ejemplo a mostrar
textoElemento.innerHTML = spanPalabras.join('');
// Resaltamos la primer palabra
textoElemento.childNodes[0].className = 'highlight';
// Borramos los mensajes previos
messageElement.innerText = '';
// Definimos el elemento textbox
// Vaciamos el elemento textbox
typedValueElement.value = '';
// Definimos el foco en el elemento
typedValueElement.focus();
// Establecemos el manejador de eventos
// Iniciamos el contador de tiempo
startTime = new Date().getTime();
});
// al final de nuestro archivo script.js
typedValueElement.addEventListener('input', () => {
// tomamos la palabra actual
const currentWord = palabras[palabraIndice];
// tomamos el valor actual
const typedValue = typedValueElement.value;
if (typedValue === currentWord && palabraIndice === palabras.length - 1) {
// fin de la sentencia
// Definimos el mensaje de éxito
const elapsedTime = new Date().getTime() - startTime;
const message = `FELICITACIONES! Finalizaste en ${elapsedTime / 1000} segundos.`;
messageElement.innerText = message;
} else if (typedValue.endsWith(' ') && typedValue.trim() === currentWord) {
// fin de la palabra
// vaciamos el valor typedValueElement para la siguiente palabra
typedValueElement.value = '';
// movemos a la palabra siguiente
palabraIndice++;
// reiniciamos el estado de todas las clases para los textos
for (const palabraElemento of textoElemento.childNodes) {
palabraElemento.className = '';
}
// resaltamos la palabra actual
textoElemento.childNodes[palabraIndice].className = 'highlight';
} else if (currentWord.startsWith(typedValue)) {
// correcta actual
// resaltar la siguiente palabra
typedValueElement.className = '';
} else {
// estado error
typedValueElement.className = 'error';
}
});