📢 Nuovo Corso Laravel API disponibile!

Filtrare Pokédex

Traccia

Il vostro obiettivo per questo esercizio è quello di mandare a schermo i dati dei Pokemon della prima generazione contenuti nel file JSON e creare una barra di ricerca per filtrarli.

I dati in json ed immagini sono reperibili su github a questo link:

Dati Pokemon JSON

Per prima cosa dovete caricare il file json dei pokemon, limitare i dati che prendete alla prima generazione e creare delle semplici card con immagine e nome del Pokemon.

Dovete poi creare una rudimentale barra di ricerca. Questa barra di ricerca dovrà permettere di cercare per nome (Charmander) oppure per tipo utilizzando il prefisso type (type:Grass).

Se il risultato è corretto, ogni soluzione è valida.

Soluzione

Pagina HTML

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
<div class="h-[300px] flex justify-center items-center">
<input
type="text"
id="search-bar"
class="rounded-xl border-2 border-slate-500 m-auto w-[700px] h-20 p-10 text-3xl font-bold" />
</div>
<div id="pokedex" class="flex flex-wrap"></div>
<script src="script.js"></script>
</body>
</html>

Pagina Script.js

Fetch dei pokemon

let pokemon;
fetch("pokemon.json-master/pokedex.json")
.then((response) => {
return response.json();
})
.then((data) => {
pokemon = data.slice(0, 151);
console.log(pokemon);
generateCards(pokemon);
})
.catch((err) => {});

Funzione per generare le card

function generateCards(listaPokemon) {
const pokedex = document.getElementById("pokedex");
while (pokedex.firstChild) {
pokedex.removeChild(pokedex.firstChild);
}
listaPokemon.forEach((pokemon) => {
const card = `<div class="iniline-block rounded-xl m-auto max-w-[200px] p-5 hover:bg-slate-200">
<img src="pokemon.json-master/images/${formatID(
pokemon.id
)}.png">
<h3>${pokemon.name.english}</h3>
</div>`;
pokedex.insertAdjacentHTML("beforeend", card);
});
}

Funzione per formattare gli ID

function formatID(id) {
if (id.toString().length == 1) return `00${id}`;
if (id.toString().length == 2) return `0${id}`;
return id;
}

Event listener per la barra di ricerca

const searchBar = document.getElementById("search-bar");
searchBar.addEventListener("keyup", (e) => {
let pokemonFiltrati = [];
if (e.target.value.startsWith("type:")) {
const value = e.target.value.replace("type:", "");
pokemonFiltrati = pokemon.filter((pkmn) => {
return pkmn.type.indexOf(value) != -1;
});
} else {
pokemonFiltrati = pokemon.filter((pkmn) => {
return pkmn.name.english.startsWith(e.target.value);
});
}
generateCards(pokemonFiltrati);
});