Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

168
Views
Guardar una clase HTML (oculta) al recargar la página con almacenamiento local

Estoy creando un juego de rol de texto en HTML/JavaScript sin formato. Configuré el almacenamiento local usando almacenamiento simple para facilitarme la vida. Dicho esto, me encuentro con un problema divertido con los cofres del tesoro. Si abre un cofre, la función oculta correctamente el botón para evitar abrir el cofre nuevamente. ¡Pero si vuelves a cargar la página después de guardar, el cofre vuelve a aparecer! La clase que se agregó al cofre se elimina, lo que permite al jugador sacarlo nuevamente. Dado que su inventario se guarda correctamente, en teoría podrían obtener infinitas pociones.

HTML:

 <button id="chest-1" onclick="openChest(potion, this.id)" onload="toggleChests()">Open Chest</button>

JS:

 let opened = document.getElementsByClassName("opened"); opened.hidden = true; function openChest(item, id){ inventory.push(item); document.getElementById(id).hidden = true; document.getElementById(id).classList.add("opened"); alert("You found: " + item.name + " - in the chest!"); simpleStorage.set("opened", opened); };

Cuando se carga el juego, debe verificar si se ha guardado una clase de cofre y, de ser así, aplicarla. Creo que aquí es donde definitivamente estoy haciendo las cosas mal.

 function toggleChests(){ opened = simpleStorage.get("opened", opened); if (opened === true){ opened.hidden = true; } };

Código fuente del proyecto: https://github.com/AndyDaMandy/Textia

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Lo descubrí gracias a algunos de los consejos de Heretic Monkey y Cbroe.

Resolví el problema colocando la cadena de identificación de cada cofre abierto en una matriz llamada "abierto". Cuando guarda, la matriz se guarda. Cuando se carga, se vuelve a cargar abierto. Luego, la función de carga llama a la función applyOpened, que luego aplica un .map a la matriz. Toma cada identificación y la coloca en un documento. getElementById, luego le agrega el atributo oculto. Esto se hace antes de cargar la página para el jugador, evitando que acceda al elemento sin usar la consola (¡y eso sería hacer trampa!). Nuevamente, el almacenamiento simple hace que no necesite convertir la matriz en una cadena, ¡pero también debería funcionar con el almacenamiento local normal!

Aquí está el código:

 let opened = []; function openChest(item, id){ inventory.push(item); document.getElementById(id).hidden = true; opened.push(id); alert("You found: " + item.name + " - in the chest!"); }; function applyOpened () { function apply(arr) { document.getElementById(arr).hidden = true; } opened.map(apply); }; function save() { simpleStorage.set("opened", opened); }; function load(){ opened = simpleStorage.get("opened", opened); applyOpened(); };

Y aquí está el html para el cofre:

 <button id="chest-1" onclick="openChest(potion, this.id)">Open Chest</button>
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!