50天50個小項目 (Vue3 + Tailwindcss V4) ? | IncrementingCounter(遞增計數器)

📅 我們繼續 50 個小項目挑戰!—— IncrementingCounter組件

倉庫地址:https://github.com/SunACong/50-vue-projects

項目預覽地址:https://50-vue-projects.vercel.app/

在這里插入圖片描述


使用 Vue 3 的 Composition API 和 <script setup> 語法結合 TailwindCSS 構建一個帶有數字增長動畫效果的統計卡片組件。該組件常用于展示社交媒體粉絲數、網站訪問量、銷售數據等可視化指標。

🎯 組件目標

  • 展示多個統計數據項(如 Twitter 關注者、YouTube 訂閱數等)。
  • 數字從 0 動態增長到指定目標值。
  • 使用圖標與文字搭配提升視覺識別度。
  • 使用 TailwindCSS 快速構建現代 UI 界面。
  • 添加生命周期控制防止內存泄漏。

?? 技術實現點

技術點描述
Vue 3 Composition API (<script setup>)使用響應式變量管理組件狀態
reactive() 響應式數組存儲并更新多個統計項數據
onMounted 生命周期鉤子在組件掛載后啟動動畫
setInterval 定時器控制數字逐步遞增的過程
clearInterval避免內存泄漏,在組件卸載時清除定時器
TailwindCSS 布局與樣式快速構建美觀的統計卡片界面

🧱 組件實現

模板結構 <template>

<template><div class="flex h-screen items-center justify-center gap-20 text-white"><divclass="flex flex-col items-center justify-center gap-2"v-for="item in iconList":key="item.id"><img :src="item.icon" alt="icon" class="h-20 w-20" /><div class="text-3xl font-extrabold">{{ item.count }}</div><div class="font-mono">{{ item.name }}</div></div></div>
</template>

腳本邏輯 <script setup>

<script setup>
import { ref, onMounted, onUnmounted, reactive } from 'vue'const iconList = reactive([{id: 1,name: 'Twitter Followers',count: 0,icon: '/src/assets/icon/推特.svg',target: 12000,},{id: 2,name: 'Facebook Fans',count: 0,icon: '/src/assets/icon/facebook.svg',target: 5000,},{id: 3,name: 'YouTube Subscribers',count: 0,icon: '/src/assets/icon/油管.svg',target: 7000,},
])onMounted(() => {const totalSteps = 100 // 總步數const intervalDuration = 10 // 每次間隔時間(毫秒)let currentStep = 0const interval = setInterval(() => {currentStep++iconList.forEach((item) => {const stepValue = Math.ceil(item.target / totalSteps) // 每步增長的值item.count = Math.min(item.count + stepValue, item.target) // 確保不超過目標值})if (currentStep >= totalSteps) {clearInterval(interval)}}, intervalDuration)onUnmounted(() => {clearInterval(interval)})
})
</script>

🔍 重點效果實現

? 數字增長動畫原理

通過 setInterval 設置了一個定時器,每 10ms 執行一次:

iconList.forEach((item) => {const stepValue = Math.ceil(item.target / totalSteps)item.count = Math.min(item.count + stepValue, item.target)
})
  • 將目標值平均分成 totalSteps 步;
  • 每次增加一步的數值;
  • 最終達到目標值,并停止計時器。

這樣就能實現一個平滑的數字增長動畫。

💡 組件卸載清理機制

為避免內存泄漏,我們在 onUnmounted 中調用 clearInterval

onUnmounted(() => {clearInterval(interval)
})

確保組件卸載時自動清除定時器。


🎨 TailwindCSS 樣式重點講解

類名作用
flex, items-center, justify-center居中布局整個容器
h-screen高度為視口全高
gap-20元素之間間距為 5rem
flex-col設置為縱向排列
h-20, w-20圖標大小為 5rem × 5rem
text-3xl字體大小為 1.875rem
font-extrabold加粗字體
font-mono使用等寬字體
text-white設置文字顏色為白色

這些 Tailwind 工具類幫助我們快速構建了一個視覺清晰、層次分明的統計信息展示區域。


📁 常量定義 + 組件路由

? 常量定義(可選)

constants/index.js 添加組件預覽常量:

{id: 15,title: 'Incrementing Counter',image: 'https://50projects50days.com/img/projects-img/15-incrementing-counter.png',link: 'IncrementingCounter',},

router/index.js 中添加路由選項:

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

🏁 總結

數據統計卡片組件涵蓋了Vue 3 的響應式系統、定時器控制、生命周期管理和 TailwindCSS 的靈活樣式組合。


👉 下一篇,我們將完成DrinkWater組件,一個交互式的喝水記錄以及達成目標的組件,具有絲滑的交互動畫!🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87925.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87925.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

簡約求職簡歷競聘工作求職PPT模版共享

簡歷競聘&#xff0c;自我介紹&#xff0c;個人簡歷&#xff0c;工作求職PPT模版&#xff0c;崗位競聘求職簡歷PPT模版&#xff0c;低調綠自我介紹PPT模版&#xff0c;簡約求職簡歷PPT模版&#xff0c;個人介紹PPT模版&#xff0c;我的簡歷PPT模版&#xff0c;個人求職簡介PPT模…

Java大廠面試攻略:Spring Boot與微服務架構深度剖析

問題一&#xff1a;Spring Boot 的自動配置原理是什么&#xff1f; 簡潔面試回答&#xff1a; Spring Boot 的自動配置基于條件化配置&#xff0c;通過 Conditional 注解實現&#xff0c;根據項目中依賴和環境自動裝配 Bean。 詳細解析&#xff1a; Spring Boot 自動配置的核…

Windows核心端口攻防全解析:135、139、445端口的技術內幕與安全實踐

Windows核心端口攻防全解析&#xff1a;135、139、445端口的技術內幕與安全實踐 引言&#xff1a;Windows網絡通信的命脈 在Windows網絡生態系統中&#xff0c;135、139和445端口猶如網絡通信的"大動脈"&#xff0c;承載著關鍵的系統服務和網絡功能。這些端口不僅是…

從生活場景學透 JavaScript 原型與原型鏈

一、構造函數&#xff1a;以 “人” 為例的對象工廠 1. 生活場景下的構造函數定義 我們以 “人” 為場景創建構造函數&#xff0c;每個人都有姓名、年齡等個性化屬性&#xff0c;也有人類共有的特征&#xff1a; // 人類構造函數 function Person(name, age) {this.name na…

學c++ cpp 可以投遞哪些崗位

此次描述知識針對應屆生來說哈&#xff0c;如果是社招&#xff0c;更多是對于你目前從事的方向&#xff0c;技術棧進行招聘就好了。 此次編寫是按照boss上崗位篩選的方式進行編寫的&#xff0c;其實投簡歷一般也是用boss&#xff0c;后面也會出一篇文章給大家介紹一般找工作都用…

【Docker基礎】Docker鏡像管理:docker rmi、prune詳解

目錄 引言 1 Docker鏡像管理概述 1.1 為什么需要鏡像清理&#xff1f; 1.2 鏡像生命周期管理 2 docker rmi命令詳解 2.1 基本語法 2.2 常用選項 2.3 刪除單個鏡像 2.4 刪除多個鏡像 2.5 強制刪除鏡像 2.6 刪除所有鏡像 3 docker rmi工作原理 3.1 鏡像刪除流程 3.…

57-Oracle SQL Profile(23ai)實操

在上一期中說到了SQL Tuning Advisor其中一個影響對象就是SQL Profile&#xff0c;同樣在管理和應用開發中,SQL性能優化是個任重道遠的工作&#xff0c;低效的SQL語句讓應用響應緩慢,用戶整體體驗下降,拖垮搞蹦整個系統都有可能。Oracle數據庫提供了多種組合工具&#xff0c;有…

man的使用

man的使用 文章目錄 man的使用基本用法&#xff1a;常見 man 命令操作&#xff1a;man 命令的章節&#xff1a;示例&#xff1a; man 是 Linux 和 macOS 系統中的命令&#xff0c;用于查看命令和程序的手冊頁&#xff08;manual pages&#xff09;。手冊頁包含了關于命令、函…

【藍牙】手機連接Linux系統藍牙配對,Linux Qt5分享PDF到手機

要實現手機連接 A40i Linux 系統并通過藍牙接收 PDF 文件&#xff0c;可以按照以下步驟操作&#xff1a; 1. 配置 Linux 藍牙功能 確保開發板上的藍牙模塊已正確驅動并支持藍牙協議棧。 安裝藍牙工具&#xff1a; bash sudo apt install bluetooth bluez bluez-tools 啟動藍…

1432. 改變一個整數能得到的最大差值

1432. 改變一個整數能得到的最大差值 題目鏈接&#xff1a;1432. 改變一個整數能得到的最大差值 代碼如下&#xff1a; class Solution { public:int maxDiff(int num) {string s to_string(num);function<int(char, char)> replace_stoi [&](char old_char, cha…

解密 Spring MVC:從 Tomcat 到 Controller 的一次完整請求之旅

今天&#xff0c;想和你聊一個我們每天都在打交道&#xff0c;但可能不曾深入思考的話題&#xff1a;當一個 HTTP 請求從瀏覽器發出&#xff0c;到最終被我們的 Spring Controller 處理&#xff0c;它到底經歷了一場怎樣的旅程&#xff1f; 理解這個流程&#xff0c;不僅僅是為…

在 Java 中操作 Map時,高效遍歷和安全刪除數據

在 Java 中操作 Map 時&#xff0c;高效遍歷和安全刪除數據可以通過以下方式實現&#xff1a; 一、遍歷 Map 的 4 種高效方式 1. 傳統迭代器&#xff08;Iterator&#xff09; Map<String, Integer> map new HashMap<>(); map.put("key1", 5); map.pu…

力扣-136.只出現一次的數字

題目描述 給你一個 非空 整數數組 nums &#xff0c;除了某個元素只出現一次以外&#xff0c;其余每個元素均出現兩次。找出那個只出現了一次的元素。 你必須設計并實現線性時間復雜度的算法來解決此問題&#xff0c;且該算法只使用常量額外空間。 class Solution {public i…

Go 網絡編程:HTTP服務與客戶端開發

Go 在標準庫中內置了功能強大的 net/http 包&#xff0c;可快速構建高并發、高性能的 HTTP 服務&#xff0c;廣泛應用于微服務、Web后端、API中間層等場景。 一、快速創建一個HTTP服務 示例&#xff1a;最簡Hello服務 package mainimport ("fmt""net/http&quo…

【Prism】 實現注入的幾個標準化步驟(相機舉例)

?? Prism 架構中如何優雅地注冊和注入相機服務 在開發基于 Prism + WPF 的應用時,合理使用依賴注入(DI)可以大大提高系統的可維護性和擴展性。本文以一個多相機平臺管理系統為例,展示如何通過接口、枚舉、容器注冊等方式,實現相機服務的靈活配置與使用。 ?? 一、定義…

vue3組件式開發示例

1&#xff0c;定義組件&#xff08;根據實際調整提交分析結果方法&#xff09; <template><!-- 分析結果上傳對話框組件 --><el-dialogv-model"uploadResultDialog":title"title":width"width":before-close"handleBeforeC…

基于arm linux的bluealsa開啟藍牙A2DP和SCO錄音功能

bluealsa的軟件架構 #mermaid-svg-ohITacCRHItwRR1t {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ohITacCRHItwRR1t .error-icon{fill:#552222;}#mermaid-svg-ohITacCRHItwRR1t .error-text{fill:#552222;stroke:…

網頁后端開發(基礎3--Springboot框架)

web的服務器資源&#xff1a; 靜態資源&#xff1a;服務器上存儲的不會改變的數據&#xff0c;通常不會根據用戶的請求而變化。比如&#xff1a;HTML、CSS、JS、圖片、視頻等&#xff08;負責頁面展示&#xff09; 動態資源&#xff1a;服務器端根據用戶請求和其他數據…

ROS通過urdf_to_graphiz對urdf和xacro文件進行結構可視化

對機器人的urdf文件進行結構可視化&#xff1a; 舉例命令如下&#xff1a; urdf_to_graphiz go2_description.urdf 輸出 .gv 和 .pdf文件&#xff0c;打開 pdf文件如圖&#xff1a;

基于Uniapp+PHP的教育培訓系統開發指南:網校源碼實戰剖析

在線教育日益普及的今天&#xff0c;如何快速搭建一個功能完善、體驗良好的教育培訓系統&#xff0c;成為眾多教育機構、培訓企業、個體講師關注的焦點。與其從零開發&#xff0c;不如基于成熟框架快速部署。而UniappPHP正是當前“低成本高效率”開發網校系統的黃金組合。 本文…