¿Qué es localStorage?
Clase 18 de 24 • Taller Práctico de JavaScript: ¡Crea tu Primer Videojuego!
Contenido del curso
Rubén Ernesto Aragón Gil
Orlando Rodriguez
Orlando Rodriguez
Sebastián Caraballo Marzola
Raúl Adolfo Sánchez Rodríguez
Alexander Florez
Gustavo Vargas Miranda
Manuel Araujo
César Augusto Cortés Labrada
silfredo mario
Juan Castro
Juan Carlos Montilla Sánchez
Iván Sergio Adamo
Beder Danilo Casa Condori
Raúl Adolfo Sánchez Rodríguez
Raúl Adolfo Sánchez Rodríguez
JORGE MANRIQUE CHAVARRO
Alejandro Ramos
Frandel Corporan Rodríguez
Hector Maluy Fernandez
Matias Ezequiel Rivero
Uriel Solis Salinas
Fabio Escobar
Eliezer Hernandez
Primero creo la variable con localStorage
localStorage.setItem('record', 0);
Luego la funcion
function showRecord(){ if(playerTime > localStorage.getItem('record')){ localStorage.setItem('record', playerTime); recordView.innerText = 'Record: 🏁'+ localStorage.getItem('record'); } }
Una pequeña correcion, en el condicional debe ser playerTime < localStorage.getItem('record')
pov. eliminan a patito ; let timeRecord
Modifique la funcion gameWin:
function gameWin(){ console.log('GANASTE EL JUEGO'); clearInterval(timeInterval); if(!localStorage.getItem('record') || timeRecord < localStorage.get('record')){ localStorage.setItem('record', timeRecord) record.innerHTML = timeRecord; } }
finalmente la variable timeRecord se almacena cada vez que corre showTime() con el setInterval:
function showTime(){ timeRecord = Date.now() - timeStart; timeCount.innerHTML = timeRecord; }
La variable de Juan DC cuando use localStorage.removeItem
HTML: Creo un párrafo que contenga un span para anunciar un nuevo record:
<p><span id="new_record"></span></p>
JavaScript: Ya tú habías creado una variable timePlayer. Yo creo además otra llamada puntuacion y también accedo al span del record:
let timePlayer; let puntuacion; const new_record = document.querySelector('#new_record');
Dentro de la función startGame, en el condicional donde verificamos que se acabaron los mapas, coloco después del llamado de la función gameWin el siguiente código:
timePlayer = Number(spanTime.innerHTML); puntuacion = Number(localStorage.getItem('Record')); if(!puntuacion) { localStorage.setItem('Record', timePlayer); } else { if(timePlayer < puntuacion) { new_record.innerHTML = 'Has conseguido un nuevo record!!!'; localStorage.setItem('Record', timePlayer); } }
Con esto, luego de terminar el juego, asigno a la variable timePlayer el número que esté en el span del tiempo que se detuvo y a la variable puntuación le asigno el valor de una variable en el localStorage.
A continuación escribo un condicional para que, si “puntuación” aún no existe (caso de la primera vez que se juega), se asigne al localStorage una variable con el valor de timePlayer; pero en caso de que “puntuación” sí existiera, que compare el valor guardado en memoria con el nuevo valor obtenido y muestre el mensaje de nuevo record en el span correspondiente si el nuevo tiempo es menor al que está guardado en memoria, y además que guarde el nuevo valor en el localStorage.
Para resolver los del reto hice lo siguiente:
Cree las variables globales textRecord y record.
let record; let textRecord = document.getElementById('record');
En startGame() cree dos condicionales: El primer condicional se encarga de poner en pantalla el último record del jugador siempre que se inicie el juego sólo si el localStore es diferente de cero. El segundo pondrá en pantalla el record con valor de cero sólo en el primer juego(cuando se ejecute por primera vez el juego).
if(parseInt((localStorage.getItem('gameRecord')))){ textRecord.innerText = +localStorage.getItem('gameRecord'); } if(!parseInt((localStorage.getItem('gameRecord')))){ localStorage.setItem('gameRecord', 0); textRecord.innerText = +localStorage.getItem('gameRecord'); }
Por último en la función gameWin() se guarda el record en la variable 'record' y cree otros dos condicionales. Un condicional pondrá en pantalla el primer record del jugador pero sólo la primera vez que se inicie el juego. El segundo se encargará de poner el nuevo record sólo si es menor que el guardado por última vez en localStore
record = ((Date.now()-timeStart)/1000).toFixed(1); if(record && !(parseInt(localStorage.getItem('gameRecord')))){ localStorage.setItem('gameRecord', record); textRecord.innerText = +localStorage.getItem('gameRecord'); } if(record<parseInt((localStorage.getItem('gameRecord')))){ localStorage.setItem('gameRecord', record); textRecord.innerText = +localStorage.getItem('gameRecord'); }
¿localStorage sigue funcionando así se borre la caché del navegador?
Correcto. Son elementos diferentes en el navegador. :D
Es curioso porque yo intenté hacer eso mismo de borrar toda la información del navegador: historial, caché, cookies y se me eliminó, ¿el localstorage se guarda en algunas de esas tres opciones o será que había otra seleccionada que no me fijé? 👀
El patito está vacio...
jajaja
🎮OPORTUNIDAD DE MEJORA: Tarjetas de mensajes al ganar y perder el juego ⭐⭐
Resultado
Paso a paso
Mi solución.
function gameWin() { const duration = (Date.now() - timeStart) / 1000; const timeBefore = localStorage.getItem('record'); let record; let message; console.log('Terminaste el juego'); clearInterval(timeInterval); if (!timeBefore) { record = duration; } else { if (duration < timeBefore) { record = duration; message = `Superaste tú record antes ${timeBefore} ahora ${duration}`; } else { record = timeBefore; message = `Ocupaste más tiempo`; } } localStorage.setItem('record', record); alert(`${record} - ${message}`); }
💪 LocalStorage para guardar en local xd <3
Pues yo en gameWin utiliaria localStorage.setItem para guardar el record y creo un nuevo span en html donde imprimiria el mismo con getItem
function showTime() { spanTime.innerHTML = formatTime(Date.now() - timeStart); } function formatTime(milisegundos) { const segundos = Math.floor(milisegundos / 1000); const minutos = Math.floor(segundos / 60); const horas = Math.floor(minutos / 60); return `${horas} horas ${minutos} minutos ${segundos} segundos`; }
Hola, comparto la solución que implementé.
variable global para guardar el record.
let record = localStorage.getItem('record');
en la función startGame para renderizar el record guardado.
spanRecord.innerText = localStorage.getItem('record');
condicional en finishGame para registrar el record o nuevo record.
function finishGame() { console.log('terminaste el juego, tremendo ganador sos!!'); clearInterval(timeInterval); if(!record) { record = timePlayer; localStorage.setItem('record', record); }; if(timePlayer < record) { record = timePlayer; localStorage.setItem('record', record); }; spanRecord.innerText = localStorage.getItem('record'); };
Muchas gracias, saludos.
Apuntes de la clase:
"localStorage" sirve solamente si se esta ejecutando el código JS en un navegador web o que se ejecute junto un HTML. Esto es el almacenamiento local en el navegador, es decir, se le pide al navegador que guarde alguna información por ti. - localStorage.getItem es para leer alguna información que tengamos dentro de localStorage. Ejemplo: localStorage.getItem("Nombre variable"). - localStorage.setItem es para guardar una variable por primera vez. Ejemplo: localStorage.setItem("Variable a guardar", "Valor de la variable"). - localStorage.removeItem borra las variables guardadas en el navegador. Ejemplo: localStorage.removeItem("Nombre variable").
Asi lo implemente yo:
function gameWin() { console.log("TERMINASTE EL JUEGO!"); if (timePlayer < localStorage.puntaje) { localStorage.setItem("puntaje", timePlayer); } clearInterval(timeInterval); }
Si requieren determinar el menor de dos números, puedes utilizar el método Math.min(numero1,numero2).