javascript - 使用 API 数据在 Javascript 中翻转卡片
问题描述
使用 PokeAPI 我正在尝试让卡片显示数据,然后当您单击它们时,它们会翻转并显示一组不同的数据。
这是我的 JavaScript:
const poke_container =
document.getElementById('poke_container');
const dex_id = 151;
const colors = {
grass: '#63BB5B',
fire: '#FF9C54',
water: '#4E90D5',
electric: '#F3D23B',
ice: '#74CEC0',
poison: '#AB6AC8',
ground: '#D97746',
rock: '#C7B78B',
bug: '#90C12C',
dragon: '#0A6DC4',
normal: '#f9199A1',
flying: '#8FA8DD',
fighting: '#D80A49',
psychic: '#F97176',
ghost: '#5269AC',
dark: '#5A5366',
steel: '#5A8EA1',
fairy: '#EC8FE6',
};
//Fetch card colors
const main_types = Object.keys(colors);
//Get Pokemon from API
const fetchPokemon = async () => {
for (let i = 1; i<= dex_id; i++) {
await getPokemon(i);
}
};
const getPokemon = async id => {
const url = `https://pokeapi.co/api/v2/pokemon/${id}`;
const res = await fetch(url);
const pokemon = await res.json();
createPokemonCard(pokemon);
};
fetchPokemon();
//Variables for Pokemon Card data from API
function createPokemonCard(pokemon) {
const pokemonEl = document.createElement('div');
const pokemonElBack = document.createElement('div');
pokemonEl.classList.add('pokemon');
const poke_types = pokemon.types.map(el => el.type.name);
const type = pokemon.types[0].type.name;
//const stats = pokemon.stats[0].stat.name;
const ability = pokemon.abilities[0].ability.name;
const name = pokemon.name[0].toUpperCase() + pokemon.name.slice(1);
const card_color = colors[type];
pokemonEl.style.backgroundColor = card_color;
//Card Front data and HTML
const pokeInnerHTML = `
<div class="img-container">
<img src="https://pokeres.bastionbot.org/images/pokemon/${pokemon.id}.png" />
</div>
<div class ="info">
<span class="number">#${pokemon.id.toString().padStart(3, '0')}</span>
<a href="https://bulbapedia.bulbagarden.net/wiki/${name}_(Pok%C3%A9mon)" class="name"><h3>${name}</h3></a>
<small class="type"><span>${type.charAt(0).toUpperCase() + type.slice(1)}</span></small>
</div>
`;
pokemonEl.innerHTML = pokeInnerHTML;
poke_container.appendChild(pokemonEl);
// Back of the card data
const pokeCardBack = `
<div class="flipped">
<div class="img-container">
<img src="https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/${pokemon.id}.png" />
</div>
<div class ="info">
<span class="number">#${pokemon.id.toString().padStart(3, '0')}</span>
<h3 class="name">${name}</h3>
<small class="type"><span>${ability}</span></small>
</div>
</div>
`;
pokemonElBack.innerHTML = pokeCardBack;
//Flip card from front to back function
const back = document.querySelectorAll('.pokemon');
function flipCard() {
this.classList.toggle('flipped');
}
back.forEach((card) => card.addEventListener("click", flipCard));
}});
这是与我的口袋妖怪数据相关的 CSS。
.poke_container {
display: flex;
flex-wrap: wrap;
align-items: space-between;
justify-content: center;
margin: 0 auto;
max-width: 1200px;
}
.pokemon {
background-color: #eee;
border-radius: 20px;
box-shadow: 0 3px 15px rgba(100, 100, 100, 0.5);
margin: 10px;
padding: 20px;
text-align: center;
transition: transform .3s;
&:hover {
transform: scale(1.2);
}
}
.pokemon .img-container {
background-color: rgba(255, 255, 255, 0.6);
border-radius: 50%;
width: 120px;
height: 120px;
text-align: center;
}
.pokemon .img-container img {
margin-top: 20px;
max-width: 90%;
}
.pokemon .info {
margin-top: 20px;
}
.pokemon .number {
background-color: rgba(0, 0, 0, 0.1);
border-radius: 10px;
font-size: 0.8em;
padding: 5px 10px;
font-family: 'Josefin Sans', sans-serif;
}
.pokemon .name {
margin: 15px 0 7px;
letter-spacing: 1px;
font-family: 'Cabin', sans-serif;
}
.pokemon .type {
background-color: rgba(0, 0, 0, 0.1);
border-radius: 10px;
font-size: 0.8em;
padding: 5px 10px;
font-family: 'Josefin Sans', sans-serif;
}
.pokemon.flipped {
transform: rotateY(180deg);
}
目前,当我点击卡片时,它只是翻转和反转文本,而不是显示 pokeCardBack 数据。此外,由于某种原因,它仅适用于其他所有卡。
如何让 FlipCard 函数显示来自 pokeCardBack 变量的 InnerHTML 数据?
解决方案
推荐阅读
- wordpress - WooCommerce - 打开选择类别的新产品
- sql - 房屋 pset7 对我来说工作正常,但在运行 check50 时不起作用
- asp.net - ñ ASP.NET Core 3.1 http 标头中的字符
- c - 寻求有关 cs50“现金”问题集的 C 中的贪心算法的帮助
- python - KeyError:“没有 [Int64Index([ 12313,\n , 34534],\n dtype='int64', leng
- javascript - Javascript减少其他功能
- asp.net-core - 如何更改 Azure AD 的 redirect_uri
- cmake - 如何解析整个项目,但只构建依赖于其他子文件夹的子文件夹,使用 cmake
- html - 如何在 ion-card-header 右侧定位图标?
- c# - 如何使用 C# Winforms 从子窗体调用父窗体中的数据表?