50天50個小項目 (Vue3 + Tailwindcss V4) ? | AutoTextEffect(自動打字機)

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

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

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

在這里插入圖片描述


利用 Vue 3 的 Composition API 和一些簡單的 CSS 動畫來構建一個動態的打字機效果。這個效果不僅能夠逐個字符地顯示文本,還能模擬刪除操作,為用戶帶來更豐富的視覺體驗。

🎯 組件目標

  • 實現逐字顯現文本的打字機效果
  • 支持調節打字速度
  • 模擬刪除操作,增加互動性
  • 使用 Vue 3 Composition API 管理狀態與生命周期

?? 技術實現點

技術點描述
Vue 3 <script setup>利用響應式變量管理顯示文本、速度等狀態
ref 響應式引用控制顯示文本、是否刪除狀態和定時器ID
生命周期鉤子 (onMounted, onUnmounted)自動啟動/清理動畫邏輯
watch 監聽器實時響應打字速度變化
CSS 動畫實現光標閃爍效果

🧱 組件實現

模板結構 <template>

<template><div class="flex min-h-screen flex-col items-center justify-center bg-gray-900 text-white"><div class="min-h-[3rem] p-4 text-center text-2xl font-bold">{{ displayedText }}<span class="inline-block w-[1ch] animate-ping align-bottom">|</span></div><div class="mt-8 flex flex-col items-center"><label for="speed" class="mb-2 text-lg">調節打字速度</label><input id="speed" type="range" min="50" max="500" v-model="speed" class="w-64" /><span class="mt-2">速度: {{ speed }}ms</span></div></div>
</template>

此模板包括一個用于顯示打字機效果的區域和一個滑塊控件,允許用戶調整打字速度。

腳本邏輯 <script setup>

<script setup>
import { ref, watch, onMounted, onUnmounted } from 'vue'const fullText = '這是一個打字機效果示例,字母或漢字會一個個顯示!'
const displayedText = ref('')
const speed = ref(150)const isDeleting = ref(false)
let timeoutId = null
let index = 0const typeLoop = () => {const current = fullText.slice(0, index)displayedText.value = currentif (!isDeleting.value) {if (index < fullText.length) {index++timeoutId = setTimeout(typeLoop, speed.value)} else {isDeleting.value = truetimeoutId = setTimeout(typeLoop, 1000) // 停頓后開始刪除}} else {if (index > 0) {index--timeoutId = setTimeout(typeLoop, speed.value)} else {isDeleting.value = falsetimeoutId = setTimeout(typeLoop, 500) // 停頓后重新打字}}
}onMounted(() => {typeLoop()
})onUnmounted(() => {if (timeoutId) clearTimeout(timeoutId)
})watch(speed, (newSpeed) => {// 每次變速立即影響后續節奏if (timeoutId) {clearTimeout(timeoutId)timeoutId = setTimeout(typeLoop, newSpeed)}
})
</script>

這段腳本實現了核心邏輯,包括:

  • 初始化狀態和設置默認值
  • 定義打字循環函數 typeLoop
  • 使用 onMountedonUnmounted 來控制動畫的啟動與清理
  • 使用 watch 來監聽并即時響應打字速度的變化

🔍 關鍵功能解析

? 打字機邏輯

typeLoop 函數負責處理文本的顯示和刪除過程。它首先獲取當前要顯示的文本片段,然后根據是否處于“刪除”模式決定是添加還是移除字符。此外,該函數還引入了短暫的停頓時間,以模擬真實的打字體驗。

💡 動態調整速度

通過綁定到輸入范圍控件的 v-model,我們可以實時調整打字速度。一旦速度發生變化,watch 監聽器會立即取消當前計時器,并根據新的速度重新啟動打字循環。

🎨 光標閃爍效果

利用 TailwindCSS 的 animate-ping 類,我們可以輕松實現一個閃爍的光標效果,進一步提升用戶體驗。


🎨 TailwindCSS 樣式重點講解

類名作用
flex, min-h-screen, flex-col, items-center, justify-center使用 Flexbox 創建一個全屏垂直居中的布局
bg-gray-900設置背景顏色為深灰色,增加對比度和視覺層次感
text-white設置文字顏色為白色,確保在深色背景下清晰可見
min-h-[3rem], p-4, text-center, text-2xl, font-bold控制文本顯示區域的高度、內邊距、文本對齊方式、字體大小及加粗效果
inline-block, w-[1ch], animate-ping, align-bottom實現光標的樣式設置,包括寬度(字符單位)、動畫效果以及垂直對齊
mt-8, flex, flex-col, items-center調整輸入范圍控件和其他元素的外邊距、使用Flexbox進行布局,并使其內容居中對齊
mb-2, text-lg為標簽提供下邊距和字體大小
w-64設置滑動條的最大寬度
mt-2給速度顯示文本添加上邊距

📁 常量定義 + 組件路由

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

{id: 30,title: 'Auto Text Effect',image: 'https://50projects50days.com/img/projects-img/30-auto-text-effect.png',link: 'AutoTextEffect',},

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

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

🏁 總結

使用 Vue 3 的 Composition API 結合 TailwindCSS 創建一個具有交互性的打字機效果。

擴展基礎的打字機效果:

  • ? 提供一個文本框讓用戶自行輸入想要展示的文字。
  • ? 字符顏色漸變
  • ? 背景閃爍
  • ? 添加粒子爆炸或其他動畫效果

👉 下一篇,我們將完成PasswordGenerator組件,一個密碼生成器組件,可以對生成的密碼進行配置、復制。🚀

感謝閱讀,歡迎點贊、收藏和分享 😊

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

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

相關文章

[RAG] LLM 交互層 | 適配器模式 | 文檔解析器(`docling`庫, CNN, OCR, OpenCV)

第二章&#xff1a;LLM 交互層 在上一章中&#xff0c;我們學習了作為"項目總控"的管道協調器&#xff0c;它負責協調 RAG 系統中各個功能模塊。 其中最重要的協調對象之一&#xff0c;便是負責與大型語言模型&#xff08;LLM&#xff09;進行智能交互的LLM 交互層…

Golang 并發快速上手

文章目錄1. 為什么要用協程&#xff1f;1.1 進程與線程1.2 協程1.3 線程和協程的區別線程協程1.4 Go 協程&#xff08;goroutines&#xff09;和協程&#xff08;coroutines&#xff09;2.Go 協程基本內容2.1 channel2.2 select2.3 future 模式3. 實踐示例3.1 并發處理多個網絡…

ESP32輕松實現UDP無線通信

ESP32支持UDP通信&#xff0c;這是一種輕量級、高效的通信協議&#xff0c;適用于需要快速數據傳輸但對數據可靠性要求不高的場景。以下是關于ESP32如何實現UDP通信的詳細說明&#xff1a; 1. UDP協議簡介及其適用場景 UDP&#xff08;用戶數據報協議&#xff09;是一種無連接的…

Electron實現“僅首次運行時創建SQLite數據庫”

在桌面應用中&#xff0c;SQLite因其輕量、嵌入式特性成為本地存儲的熱門選擇。但若重復初始化數據庫&#xff0c;會導致數據覆蓋或冗余。本文將詳解如何讓Electron應用僅在首次啟動時創建SQLite數據庫&#xff0c;后續啟動直接連接現有庫。一、核心邏輯與實現原理 核心思路&am…

阿里開源AI大模型ThinkSound如何為視頻配上靈魂之聲

目錄 前言 一、當AI解決視頻配音的困境 二、引入“思維鏈”&#xff1a;讓AI像專業音效師一樣思考 三、背后的技術支撐 四、未來ThinkSound會如何改變我們的世界&#xff1f; 總結 &#x1f3ac; 攻城獅7號&#xff1a;個人主頁 &#x1f525; 個人專欄:《AI前沿技術要聞…

圖論(1):多叉樹

多叉樹一、基礎知識1. 圖 & 樹2. 模板2.1 建圖二、簡單循環1. 【模板】樹的路徑求和2. 道路修建&#xff08;改&#xff09;3. 聯合權值4. 毛毛蟲樹三、自頂向下/自底向上1. 醫療中心2. 【模板】樹的直徑3. 【模板】最大子樹和4. 信號放大器一、基礎知識 1. 圖 & 樹 …

樓宇自動化:Modbus 在暖通空調(HVAC)中的節能控制(一)

引言**在當今的建筑領域&#xff0c;樓宇自動化正扮演著愈發關鍵的角色&#xff0c;它致力于提升建筑的舒適度、安全性以及能源效率。而暖通空調&#xff08;HVAC&#xff09;系統作為樓宇自動化中的核心部分&#xff0c;其能耗在整個建筑能耗中占比相當高&#xff0c;據相關數…

【SpringBoot】注冊條件+自動配置原理+自定義starter

注冊條件注入到容器內實體類型對象的屬性都是null&#xff0c;這些對象并沒有什么實際的意義&#xff0c;因為實體類的對象就是來封裝對象的&#xff0c;結果你這些對象中什么都沒有&#xff1b;解決方法是1.給這些屬性賦值然后再注入bean但是這些屬性又是固定的不是很好&#…

Server reports Content-Length Mismatch 的根源與解決方案

“服務器聲明604字節&#xff0c;Yum卻期待28680字節”——當包管理器與倉庫服務器之間的信任崩塌時&#xff0c;會發生什么&#xff1f;問題重現 yum install package_name ... Interrupted by header callback: Server reports Content-Length: 604 but expected size is: 28…

基于 Python/PHP/Node.js 的淘寶 API 商品數據抓取開發教程

在電商數據分析、競品監控等場景中&#xff0c;抓取淘寶商品數據是常見需求。淘寶開放平臺&#xff08;Open Platform&#xff09;提供了標準化的 API 接口&#xff0c;通過合法途徑調用可高效獲取商品信息。本文將分別基于 Python、PHP、Node.js 三種語言&#xff0c;詳解淘寶…

【Tensor的創建】——深度學習.Torch框架

目錄 1 Tensor概述 2 Tensor的創建 2.1 基本的創建方式 2.1.1 torch.tensor 2.1.2 torch.Tensor 2.2 創建線性和隨機張量 2.2.1 創建線性張量 2.2.2 隨機張量 1 Tensor概述 PyTorch會將數據封裝成張量&#xff08;Tensor&#xff09;進行計算&#xff0c;張量就是元素為…

Python腳本批量修復文件時間戳,根據文件名或拍攝日期

實現以下功能 更正文件的 修改時間批量修改指定文件夾中的特定后綴的文件根據文件名中的日期修改&#xff08;優先&#xff09;根據 jpg 文件屬性中的拍攝日期修改根據 mp4 文件屬性中的創建媒體日期修改模擬運行&#xff08;Dry Run&#xff09;模式 依賴 若需要基于jpg文件屬…

[Mysql] Connector / C++ 使用

一、Connector / C 使用 要使用 C 語言連接 MySQL&#xff0c;需要使用 MySQL 官網提供的庫&#xff0c;可以去官網進行下載&#xff1a;MySQL :: MySQL Community Downloads 我們使用 C 接口庫來進行連接&#xff0c;要正確使用&#xff0c;還需要做一些準備工作&#xff1a…

【PDF識別改名】使用京東云OCR完成PDF圖片識別改名,根據PDF圖片內容批量改名詳細步驟和解決方案

京東云OCR識別PDF圖片并批量改名解決方案一、應用場景在日常辦公和文檔管理中&#xff0c;經常會遇到大量 PDF 文件需要根據內容進行分類和命名的情況。例如&#xff1a;企業合同管理系統需要根據合同編號、日期等內容自動命名 PDF 文件圖書館數字化項目需要將掃描的圖書章節按…

stm32-modbus-rs485程序移植過程

背景 【modbus學習筆記】Modbus協議解析_modus協議中0.001如何解析-CSDN博客 【Modbus學習筆記】stm32實現Modbus(從機)并移植_stm32 modbus數據處理-CSDN博客 繼上篇成功移植modbus從機例程之后&#xff0c;我要嘗試移植主機的程序。經提醒&#xff0c;可用野火的modbus代碼…

Spring MVC 執行流程詳解:一次請求經歷了什么?

Spring MVC 執行流程詳解&#xff1a;一次請求經歷了什么&#xff1f; 引言 在現代 Web 開發中&#xff0c;Spring MVC 作為 Spring 框架的重要組成部分&#xff0c;廣泛應用于構建靈活、可擴展的 Java Web 應用。作為一個基于 MVC&#xff08;Model-View-Controller&#xff0…

Vue 3的核心機制-解析事件流、DOM更新、數據請求、DOM操作規范及組件庫DOM操作的解決方案

文章目錄概要整體介紹vue 中dom操作推薦方案實例概要 從Vue 3的核心機制出發&#xff0c;結合場景、應用與實例&#xff0c;系統化解析事件流、DOM更新、數據請求、DOM操作規范及組件庫DOM操作的解決方案&#xff1a; 整體介紹 ?? 一、事件流處理機制 核心機制 ? 三個階段…

Python從入門到高手9.2節-Python字典的操作方法

目錄 9.2.1 字典的操作 9.2.2 字典的查找 9.2.3 字典的修改 9.2.4 字典的添加 9.2.5 字典的刪除 9.2.6 今天你逛街了嗎 9.2.1 字典的操作 字典類型是一種抽象數據類型&#xff0c;抽象數據類型定義了數據類型的操作方法&#xff0c;在本節的內容中&#xff0c;教同學們徹…

omniparser v2 本地部署及制作docker鏡像(20250715)

關于 omniparser v2 本地部署&#xff0c;網上資料不算多&#xff0c;尤其是對于土薔內用戶&#xff0c;還是有些坑的。 1、安裝步驟 可參考兩個CSDN博客&#xff1a; &#xff08;1&#xff09;大模型實戰 - ‘OmniParser-V2本地部署安裝 鏈接 &#xff08;2&#xff09;…

自己寫個 `rsync` + `fswatch` 實時增量同步腳本,干掉 Cursor AI、Sublime Text 的SFTP等 插件!

自己寫個 rsync fswatch 實時增量同步腳本&#xff0c;干掉 Cursor AI、Sublime Text 的 SFTP等 插件&#xff01; 作為一個碼農&#xff0c;我最頭疼的事情之一就是編輯器同步代碼到服務器這塊。用過各種各樣的sftp、rsync插件&#xff0c;感覺不好用。。 我琢磨著&#xff1…