当前位置: 首页 > news >正文

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.lryc.cn/news/590411.html

相关文章:

  • 使用Whistle自定义接口返回内容:Mock流式JSON数据全解析
  • SQL性能分析
  • C# --- 单例类错误初始化 + 没有释放资源导致线程泄漏
  • 【Linux】如何使用nano创建并编辑一个文件
  • 动态规划题解_打家劫舍【LeetCode】
  • 编译原理第四到五章(知识点学习/期末复习/笔试/面试)
  • 部分排序算法的Java模拟实现(复习向,非0基础)
  • AWS ML Specialist 考试备考指南
  • 【Qt】麒麟系统安装套件
  • uniapp写好的弹窗组件
  • OWASP Top 10 攻击场景实战
  • 在 CentOS 8 上彻底卸载 Kubernetes(k8s)
  • 01 启动流程实例
  • ICMR-2025 | 杭电多智能体协作具身导航框架!MMCNav:基于MLLM的多智能体协作户外视觉语言导航
  • 钱包核心标准 BIP32、BIP39、BIP44:从助记词到多链钱包的底层逻辑
  • STM32F4踩坑小记——使用HAL库函数进入HardFault
  • 蓝光三维扫描技术:手机闪光灯模块全尺寸3D检测的高效解决方案
  • HTML基础知识 二(创建容器和表格)
  • 在虚拟环境中复现论文(环境配置)
  • Class<T> 类传递及泛型数组
  • SSH连接复用技术在海外云服务器环境下的稳定性验证与优化方案
  • 动态规划的核心性质——最优化原理 (Principle of Optimality)
  • git的diff命令、Config和.gitignore文件
  • Python编程基础(六)| 用户输入和while循环
  • slurm设置用户节点和分区权限
  • Telink的GPIO
  • 系统思考场景应用
  • Node.js基础用法
  • 3DGS之COLMAP
  • iOS 抓包工具选择与配置指南 从零基础到高效调试的完整流程