50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Pokedex(宝可梦图鉴)

📅 我们继续 50 个小项目挑战!—— Pokedex组件

仓库地址:https://github.com/SunACong/50-vue-projects

项目预览地址:https://50-vue-projects.vercel.app/

在这里插入图片描述


使用 Vue 3 结合 PokeAPI 来创建一个炫酷的宝可梦图鉴应用。通过这个项目,你将能够浏览前150只宝可梦的信息,包括它们的名字、类型、身高、体重以及能力等。而且,每只宝可梦都有其独特的颜色主题哦!让我们开始吧! 🚀


📝 应用目标

  • 使用 Vue 3 的 <script setup> 语法和 Composition API
  • 从 PokeAPI 获取并展示宝可梦数据
  • 根据宝可梦类型动态设置卡片背景颜色
  • 实现鼠标悬停显示更多详情的交互效果
  • 采用 Tailwind CSS 快速构建美观的响应式布局

🔧 技术实现点

技术点描述
Vue 3 <script setup>简洁地定义组件逻辑
异步函数 fetchPokemons & getPokemon从 PokeAPI 获取数据
动态背景颜色根据宝可梦类型设置卡片背景色
鼠标事件绑定显示/隐藏详细信息
Tailwind CSS构建简洁美观的UI

🖌️ 组件实现

🎨 模板结构 <template>

<template><divclass="flex min-h-screen flex-col items-center justify-center bg-gradient-to-r from-gray-200 to-gray-100 p-4 font-sans"><h1 class="mb-8 text-4xl font-bold tracking-wider text-gray-800">Pokedex</h1><div class="mx-auto flex max-w-6xl flex-wrap justify-center" id="poke-container"><!-- Pokemon Card --><divv-for="pokemon in pokemons":key="pokemon.id"class="relative m-3 rounded-lg p-4 text-center shadow-md transition-transform hover:scale-105":style="{ backgroundColor: pokemon.color }"@mouseenter="showDetails = pokemon.id"@mouseleave="showDetails = null"><!-- 卡片内容 --></div></div></div>
</template>

我们的模板部分主要由一个渐变背景下的容器组成,其中包含了一个标题“Pokedex”和一个用于展示宝可梦卡片的区域。每个宝可梦卡片不仅展示了宝可梦的基本信息,还在鼠标悬停时显示更详细的资料。


💻 脚本逻辑 <script setup>

<script setup>
import { ref, onMounted } from 'vue'const pokemons = ref([])
const pokemon_count = 150
const showDetails = ref(null)// 宝可梦类型颜色映射
const colors = {fire: '#FDDFDF', grass: '#DEFDE0', electric: '#FCF7DE',water: '#DEF3FD', ground: '#f4e7da', rock: '#d5d5d4',fairy: '#fceaff', poison: '#98d7a5', bug: '#f8d5a3',dragon: '#97b3e6', psychic: '#eaeda1', flying: '#F5F5F5',fighting: '#E6E0D4', normal: '#F5F5F5',
}const main_types = Object.keys(colors)// 获取宝可梦数据
const fetchPokemons = async () => {for (let i = 1; i <= pokemon_count; i++) {await getPokemon(i)}
}const getPokemon = async (id) => {try {const url = `https://pokeapi.co/api/v2/pokemon/${id}`const res = await fetch(url)const data = await res.json()createPokemonCard(data)} catch (error) {console.error('Error fetching Pokemon data:', error)}
}// 处理宝可梦数据并添加到响应式数组
const createPokemonCard = (pokemon) => {const name = pokemon.name[0].toUpperCase() + pokemon.name.slice(1)const poke_types = pokemon.types.map((type) => type.type.name)const type = main_types.find((type) => poke_types.indexOf(type) > -1)const color = colors[type]pokemons.value.push({id: pokemon.id,name: name,type: type,color: color,height: pokemon.height,weight: pokemon.weight,abilities: pokemon.abilities,})
}// 组件挂载时获取数据
onMounted(() => {fetchPokemons()
})
</script>

🎉 关键功能解析

✅ 动态背景颜色

通过定义 colors 对象,我们可以根据宝可梦的主要类型来设置卡片的背景颜色。这不仅增加了视觉吸引力,还帮助用户快速识别宝可梦的类型。

✅ 数据获取与处理

利用 fetchPokemons 和 getPokemon 函数,我们能够轻松地从 PokeAPI 获取数据,并将其转换成我们需要的格式。此外,我们还将数据添加到响应式数组中,以确保 UI 能够自动更新。

✅ 鼠标悬停效果

通过监听 @mouseenter 和 @mouseleave 事件,我们可以在鼠标悬停时显示宝可梦的详细信息,提供更加丰富的用户体验。


🎨 Tailwind CSS 样式重点

为了帮助你更好地理解如何使用 Tailwind CSS 来构建这个应用,下面是本文中使用的 Tailwind CSS 类及其作用的详细说明:

类名作用
min-h-screen设置最小高度为视口高度
bg-gradient-to-r设置线性渐变背景,方向为从左到右
from-gray-200渐变起始颜色
to-gray-100渐变结束颜色
tracking-wider设置字母间距更宽
mx-auto自动设置左右外边距使元素水平居中
max-w-6xl设置最大宽度为 6xl (72rem)
rounded-lg设置较大的圆角半径
shadow-md添加中等强度的阴影
transition-transform平滑过渡变换属性
hover:scale-105在悬停时放大 5%
overflow-y-auto当内容超出容器高度时启用垂直滚动条
bg-white/90设置背景颜色为白色,并带有 90% 不透明度

📁 常量定义 + 组件路由

constants/index.js 添加组件预览常量:

{id: 37,title: 'Pokedex',image: 'https://50projects50days.com/img/projects-img/37-pokedex.png',link: 'Pokedex',},

router/index.js 中添加路由选项:

{path: '/Pokedex',name: 'Pokedex',component: () => import('@/projects/Pokedex.vue'),},

🏁 总结

在这篇教程中,我们学习了如何使用 Vue 3 和 PokeAPI 创建一个简单的宝可梦图鉴应用。我们探讨了如何获取和处理外部数据,以及如何基于这些数据动态地改变UI元素的样式。

想要让你的宝可梦图鉴更加完美?这里有几个扩展建议:

  • 搜索功能:增加搜索栏,让用户可以快速找到特定的宝可梦。
  • 收藏功能:允许用户收藏他们最喜欢的宝可梦。
  • 动画效果:为宝可梦卡片添加更多的过渡动画,使界面更加生动。
  • 多语言支持:支持多种语言,让更多人享受探索的乐趣!

👉 下一篇,我们将完成MobileTabNavigation组件,实现一个移动端的导航组件。🚀

感谢阅读,欢迎点赞、收藏和分享 😊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91347.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Practical Business English Oral Scene Interpretation】在职主持会议-安排任务+结束会议

文章目录Introduction1. 讨论代办事项2. 分配工作任务3. 说明截止日期4. 说明截止日期5. 感谢参会者Introduction Note that each row of the table represents the content of the conversation in order. 1. 讨论代办事项 AlexBarryNoteLet’s review the to-dos from the…

ansible简单playbook剧本例子

1. 创建主机清单vim inventory.ini192.168.100.181[web:vars] ansible_userroot ansible_passwordAdmin123456[web] 192.168.100.1822. 创建一个简单的剧本vim playbook.yaml- name: My first playhosts: webtasks:- name: Ping my hostsansible.builtin.ping:- name: Print me…

爱心烟花浪漫立方体轮播图 - 用代码表达爱意

项目介绍 这是一个专为表白和营造浪漫氛围而设计的3D立方体轮播图结合了现代Web技术与浪漫元素&#xff0c;通过立方体的旋转展示珍贵的照片&#xff0c;同时配有爱心飘动、流星划过、烟花绽放和雪花飞舞等浪漫特效&#xff0c;为你的表白增添独特的科技浪漫。 效果展示截图原…

基于人工智能的无人机网络系统

目录 1.环境感知与目标检测 2.无人机定位与导航&#xff08;SLAM与路径规划&#xff09; 3.无人机网络通信与资源优化 4.无人机集群协同控制&#xff08;一致性与编队&#xff09; 5.无人机任务分配与调度&#xff08;组合优化&#xff09; 6.MATLAB仿真测试 基于人工智能…

nginx安装配置Lua模块的支持

一、先来看几个概念问题1.1 为什么需要&#xff1f;nginx官方自带了非常多的核心模块&#xff0c;再加上第三方的模块能够满足我们大部分的业务需要&#xff0c;但是业务的需求、业务的场景变化需要添加一些额外的功能&#xff0c;如果自己去开发一个nginx模块相对来说比较笨重…

智慧矿山低光照识别准确率↑32%:陌讯多模态融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心技术参数与架构引用自《陌讯技术白皮书》&#xff0c;禁止未经授权的转载与商用。一、行业痛点&#xff1a;智慧矿山的视觉识别困境矿山场景的视觉监控一直面临多重技术挑战&#xff1a;井下巷道长期处于低光照环境&#xff08;光照…

AI赋能操作系统:通往智能运维的未来

一、具备AI能力的操作系统未来的操作系统如果具备了AI能力&#xff0c;那将彻底改变我们管理和保护服务器的方式。一旦AI能力被充分集成并启用&#xff0c;自动优化、安全检测和漏洞修复的潜力将变得无比巨大且切实可行。想象一下未来的服务器管理&#xff1a;不再需要人工夜以…

sqli-labs:Less-13关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $sql"SELECT username, password FROM users WHERE username($uname) and password($passwd) LIMIT 0,1";注入类型&#xff1a;字符串型&#xff08;单引号、括号包裹&#xff09;、POST请求提示&#xff1a;参数…

微软发布Microsoft Sentinel数据湖国际版

在网络安全威胁持续升级的背景下&#xff0c;微软宣布推出Microsoft Sentinel数据湖&#xff08;国际版&#xff09;&#xff0c;以突破性架构重塑企业安全运营能力。该产品目前已进入公开预览阶段&#xff0c;标志着安全信息与事件管理&#xff08;SIEM&#xff09;领域正式迈…

力扣面试150题--只出现一次的数字II

Day 92 题目描述思路 初次思路&#xff1a;想不出来 哈哈哈指挥hash 就不放出来丢人了 题解思路&#xff1a;这个做法是每次确定一个位是否为答案为1 的位 具体是这样的&#xff1a;由于除了答案外每个数字都会出现3次&#xff0c;那么我们不考虑答案的情况&#xff0c;那么一个…

cacti的RCE

一、环境搭建 1、安装docker curl -fsSL https://get.docker.com | sh 验证docker是否正确安装 docker version 验证docker compose是否可用 docker compose version 2、在GitHub上拉取 vulhub 首先先装一个proxychains网络代理工具&#xff0c;如果直接拉取的话速度会…

Spark SQL 的 SQL 模式和 DSL模式

下面我将详细讲解如何使用 Spark SQL 分别通过 SQL 模式和 DSL&#xff08;Domain Specific Language&#xff09;模式实现 WordCount 功能。WordCount 是大数据处理中的经典案例&#xff0c;主要功能是统计文本中每个单词出现的次数。准备工作首先需要初始化 SparkSession&…

03 基于sklearn的机械学习-线性回归、损失函数及其推导

线性回归 分类的目标变量是标称型数据&#xff0c;回归是对连续型的数据做出预测。 一、标称型数据&#xff08;Nominal Data&#xff09; 标称型数据属于分类数据&#xff08;Categorical Data&#xff09; 的一种&#xff0c;用于描述事物的类别或属性&#xff0c;没有顺序或…

TTS语音合成|f5-tts语音合成服务器部署,实现http访问

p; 上篇文章分享了如何使用GPT-SoVITS实现一个HTTP服务器&#xff0c;并通过该服务器提供文本到语音&#xff08;TTS&#xff09;服务。今天&#xff0c;我们将进一步探讨如何部署另一个强大的TTS模型——f5-tts。这个模型在自然语音生成方面表现出色&#xff0c;具有高度的可…

【Golang】Go语言指针

Go语言指针 文章目录Go语言指针一、指针1.1、Go语言中的指针1.1.1、指针地址和指针类型1.1.2、指针取值1.1.3、空指针1.1.4、new和make1.1.5、new1.1.6、make1.1.7、new与make的区别一、指针 区别于C/C中的指针&#xff0c;Go语言中的指针不能进行偏移和运算&#xff0c;是安全…

EMC的一些简单常识

ESD测试比对 & 需要做到动作 试验&#xff1a; -780系统&#xff0c;板子直流地 和 PE连接&#xff08;主板PE & DC-分开&#xff0c;但是前端板PE & DC-连接&#xff09;&#xff0c;只能承受1K接触放电。 -780系统&#xff0c;板子直流地 和 PE分开&#xff08;主…

Day4||vue-计算属性

一.定义概念&#xff1a;基于现有的数据&#xff0c;计算出来的新属性。依赖的数据变化&#xff0c;自动重新计算。语法&#xff1a;声明需要放在computed的配置项中&#xff0c;一个计算属性对于一个函数。使用起来和普通属性一样使用{{计算属性名}}计算属性->可以将一段求…

编程算法在金融、医疗、教育、制造业等领域的落地案例

随着人工智能与大数据技术的迅猛发展&#xff0c;编程算法已从理论研究走向实际应用&#xff0c;在金融、医疗、教育、制造业等多个关键领域实现了深度落地。这些算法不仅提升了业务效率&#xff0c;还推动了行业智能化转型。本文将系统性地分析编程算法在四大核心领域的典型应…

vue npm install卡住没反应

install某个插件的时候&#xff0c;发现卡住不动&#xff0c;可以尝试以下解决方法 1.使用–verbose查看安装详情 npm install consola --verbose2.更换淘宝镜像&#xff08;一般都是淘宝镜像正式过期问题&#xff09; 查看当前镜像 npm config get registry更换淘宝镜像 第一种…

【Unity3D实例-功能-移动】角色移动-通过WSAD(CharacterController方式)

今天&#xff0c;我们就来聊聊如何在Unity中使用CharacterController组件&#xff0c;让角色能够灵活移动&#xff0c;在游戏世界里像风一样自由奔跑吧。废话不多说&#xff0c;走&#xff0c;让我们马上来一探究竟&#xff01;目录&#xff1a;1.准备模型2.动画的处理3.为角色…