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
英文地址,請注明出處:http://en.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.為角色…