50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | VerifyAccountUi(验证码组件)

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

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

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

在这里插入图片描述


使用 Vue 3<script setup> 语法结合 Tailwind CSS 来创建一个简洁而优雅的验证码输入界面。通过这个示例,你将学会如何构建一个响应式且用户友好的验证码输入组件,并掌握一些实用的 Vue 技巧和 Tailwind CSS 样式技巧。

准备好了吗?让我们开始吧!🚀


📝 应用目标

  • 使用 Vue 3 Composition API 管理状态与事件处理
  • 动态生成6个独立的验证码输入框
  • 实现自动聚焦与跳转到下一个/上一个输入框的功能
  • 利用 Tailwind CSS 快速搭建美观且响应式的布局
  • 添加适当的视觉反馈以提升用户体验

🔧 技术实现点

技术点描述
Vue 3 <script setup>使用 refonMounted 定义响应式数据及生命周期钩子
响应式数组 codes存储每个验证码输入框的内容
v-for 循环生成创建6个独立的输入框
@keydown 事件监听处理键盘输入并控制焦点移动
Tailwind 过渡动画提供平滑的交互体验

🖌️ 组件实现

🎨 模板结构 <template>

<template><div class="flex min-h-screen items-center justify-center overflow-hidden bg-gray-50 font-sans"><div class="max-w-2xl rounded-lg border-4 border-black bg-white p-8 text-center"><h2 class="mb-2 text-2xl font-bold">Verify Your Account</h2><p class="mb-8 text-gray-600">We emailed you the six digit code to cool_guy@email.com<br />Enter the code below to confirm your email address.</p><!-- 验证码输入框容器 --><div class="mb-8 flex flex-wrap items-center justify-center"><inputv-for="(code, index) in codes":key="index"v-model="codes[index]"ref="codeInputs"@keydown="handleKeyDown($event, index)"class="mx-1 my-2 h-20 w-20 rounded-md border border-gray-200 text-center text-5xl font-light [caret-color:transparent] transition-all duration-300 focus:border-blue-500 focus:shadow-lg focus:shadow-blue-200/50 focus:outline-none"type="text"maxlength="1"inputmode="numeric"pattern="[0-9]" /></div><smallclass="inline-block max-w-md rounded-md bg-gray-100 px-4 py-2 text-sm text-gray-600">This is design only. We didn't actually send you an email as we don't have youremail, right?</small></div></div>
</template>

模板部分主要包括一个标题、说明文字以及六个独立的验证码输入框。每个输入框都设置了样式以提供良好的用户体验,例如自动聚焦、数字输入限制等。


💻 脚本逻辑 <script setup>

<script setup>import { ref, onMounted } from 'vue'// 验证码输入框响应式数据const codes = ref(new Array(6).fill(''))const codeInputs = ref([])// 组件挂载后聚焦第一个输入框onMounted(() => {codeInputs.value[0].focus()})// 处理键盘输入事件const handleKeyDown = (e, index) => {// 只允许数字输入if (!/\d/.test(e.key) && e.key !== 'Backspace' && e.key !== 'Tab') {e.preventDefault()return}// 数字输入处理if (e.key >= 0 && e.key <= 9) {codes.value[index] = e.key// 自动聚焦到下一个输入框if (index < 5) {setTimeout(() => codeInputs.value[index + 1].focus(), 10)}}// 退格键处理if (e.key === 'Backspace') {// 清空当前输入框codes.value[index] = ''// 聚焦到上一个输入框if (index > 0) {setTimeout(() => codeInputs.value[index - 1].focus(), 10)}e.preventDefault()}}
</script>

脚本部分主要实现了以下功能:

  • 初始化一个包含6个空字符串的数组 codes,用于存储每个验证码输入框的内容。
  • 在组件挂载时自动聚焦到第一个输入框。
  • 监听键盘事件 handleKeyDown,根据用户的输入行为调整焦点位置或更新验证码内容。

🎨 Tailwind CSS 样式重点

类名作用
min-h-screen设置最小高度为视口高度,确保页面至少占满整个屏幕的高度
items-center / justify-center分别在交叉轴(垂直)和主轴(水平)上居中对齐子元素
overflow-hidden隐藏超出容器的内容,防止溢出导致滚动条出现
bg-gray-50设置背景颜色为浅灰色,作为整体页面背景色
font-sans使用无衬线字体系列
max-w-2xl设置最大宽度为 2xl (72rem),限制主要内容区域的最大宽度
rounded-lg给元素添加较大的圆角半径
border-4 border-black添加黑色边框,边框宽度为 4px
bg-white设置背景颜色为白色,用于主要内容区域的背景色
p-8设置内边距为 8 个单位,提供足够的空间来分隔内容与边界
text-center文本居中对齐
mb-2 / mb-8设置下外边距分别为 2 和 8 个单位,用于控制元素间的间距
text-2xl / text-sm设置文本大小为 2xl (1.5rem) 和 sm (0.875rem)
font-bold设置字体加粗
text-gray-600设置文本颜色为灰色,提供对比度但不过于强烈
flex-wrap允许子元素换行排列,适应不同屏幕尺寸
mx-1 my-2分别设置左右外边距为 1 单位和上下外边距为 2 单位,用于输入框之间的间距
h-20 w-20设置固定的高度和宽度为 20 个单位,定义输入框的大小
rounded-md给元素添加中等大小的圆角半径
border border-gray-200添加浅灰色边框,增加视觉层次感
text-center文本居中对齐,适用于单字符输入框的设计
text-5xl font-light设置大号轻量级字体,使验证码数字更加突出
[caret-color:transparent]将光标颜色设置为透明,隐藏默认的闪烁光标
transition-all duration-300应用所有属性的变化过渡效果,持续时间为 300ms
focus:border-blue-500 focus:shadow-lg focus:shadow-blue-200/50当输入框获得焦点时,改变边框颜色、添加阴影以增强视觉反馈
focus:outline-none移除默认的聚焦轮廓线,避免干扰设计的一致性

📁 常量定义 + 组件路由

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

{id: 42,title: 'LiveUserFilter',image: 'https://50projects50days.com/img/projects-img/42-live-user-filter.png',link: 'LiveUserFilter',},

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

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

🏁 总结

使用 Vue 3 和 Tailwind CSS 创建一个直观且易于使用的验证码输入界面。通过合理利用 Vue 的响应式特性和 Tailwind CSS 的强大样式能力,我们可以轻松地构建出既美观又功能强大的前端组件。

想要让你的验证码输入界面更加完善?考虑以下扩展功能:

  • 表单提交验证:增加对用户输入验证码的验证逻辑。
  • 错误提示:当验证码无效时显示相应的错误消息。
  • 倒计时重发机制:模拟验证码过期后重新发送验证码的功能。

👉 下一篇,我们将完成RangeSlider组件,一个可以自定义进度的范围滑块组件。。🚀

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

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

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

相关文章

AbstractAuthenticationToken 认证流程中​​认证令牌的核心抽象类详解

AbstractAuthenticationToken 认证流程中​​认证令牌的核心抽象类详解在 Spring Security 中&#xff0c;AbstractAuthenticationToken 是 Authentication 接口的​​抽象实现类​​&#xff0c;其核心作用是为具体的认证令牌&#xff08;如用户名密码令牌、JWT 令牌等&#x…

小程序视频播放,与父视图一致等样式设置

初始设置的代码&#xff1a;WXML的代码<view class"card-wrapper"> <!-- 视频播放容器&#xff08;默认隐藏&#xff09; --> <view class"video-container" wx:if"{{isPlaying}}"> <video id"cardVideo" class&…

Kafka——关于主题管理

引言在Kafka的世界中&#xff0c;主题&#xff08;Topic&#xff09;是消息的基本组织单位&#xff0c;类似于文件系统中的"文件夹"——所有消息都按照主题分类存储&#xff0c;生产者向主题写入消息&#xff0c;消费者从主题读取消息。主题的管理是Kafka运维的基础&…

【VLLM】VLLM使用

一 、安装 二、启动入口 VLLM 提供了多种入口方式启动模型&#xff0c;以适应不同的使用场景&#xff08;如命令行交互、API 服务、自定义集成等&#xff09;。除了最常用的 openai.api_server&#xff08;OpenAI 兼容 API 服务&#xff09;&#xff0c;还有以下主要入口&#…

为Github Copilot创建自定义指令/说明/注意事项

GitHub Copilot 是一个强大的 AI 编程助手&#xff0c;通过合理配置自定义指令&#xff0c;可以让它更好地理解和遵循项目特定的编码规范&#xff0c;省的每次提问时输入重复提示语。 目录 方法一&#xff1a;项目级别指令文件&#xff08;推荐&#xff09;方法二&#xff1a…

信创厚知联盟会长兼创始人莅临绿算技术

2025年7月29日&#xff0c;信创厚知联盟会长兼创始人王杲一行考察广东省绿算技术有限公司&#xff0c;重点调研其在智算中心存储与AI算力协同领域的创新成果。此次交流标志着双方在信创产业生态合作上迈出重要一步&#xff0c;为国产高端高性能全闪存存储与智算基础设施的融合发…

RAG面试内容整理-Prompt Engineering 在 RAG 中的作用

Prompt Engineering(提示工程)指为生成模型精心设计输入提示,以引导模型产生所需的输出。在RAG系统中,prompt设计对充分利用检索到的知识至关重要。因为生成器(通常是LLM)接收到的不仅有用户问题,还有检索的文档内容,我们需要通过提示明确告诉模型如何使用这些信息。例…

【计算机网络】5传输层

传输层是面向通信的最高层&#xff0c;也是用户功能的最底层。 传输层仅存在于主机中&#xff0c;路由器等中间设备只用到下三层&#xff08;无传输层&#xff09;。传输层对上层应用隐藏了底层网络的复杂细节&#xff08;比如数据怎么路由、网络怎么连接等&#xff09;。对应用…

SecureCRT连接密钥交换失败

SecureCRT连接密钥交换失败问题描述&#xff1a;问题分析&#xff1a;解决方案&#xff1a;问题描述&#xff1a; SecureCRT6.7连接银河麒麟操作系统v10版本&#xff0c;报错如下&#xff1a; key exchange failed 密钥交换失败 no compatible key exchange method. The serv…

2021-05-10 求出这十个数据的平均值,并输入高于平均值的所有元素值及下标求出这十个数据的平均值,并输入高于平均值的所有元素值及下标

缘由C语言向一维数组a[10]中输入10个数据&#xff1a;12&#xff0c;15&#xff0c;18&#xff0c;21&#xff0c;24&#xff0c;32&#xff0c;34&#xff0c;36&#xff0c;38&#xff0c;4-其他-CSDN问答 double a[10000]{}, j 0; int n 0;while (n < 10000){std::cin …

WordPress与主流CMS拿Webshell实战

一、wordpress安装环境首先我们在vulhub中启动我们wordpress的doaker容器然后去访问我们的80端口然后选择简体中文进行安装然后就可以登录到我们的后台界面了后台修改模板拿webshell进入后台&#xff0c;我们修改一下404页面的代码&#xff0c;添加我们的一句话木马然后保存&am…

指针的运算与数组

一、指针的运算1.1加法对指针可以进行加法运算&#xff0c;即p n或者p - n。其结果依旧是一个是一个指针&#xff0c;新的指针是在原来的地址值基础上加上/减去n *(sizeof(指针指向的数据类型)&#xff09;个字节。 指针也可以进行自增&#xff0c;即*&#xff08;p &#xf…

【PostgreSQL内核学习:WindowAgg 帧优化与节点去重】

PostgreSQL内核学习&#xff1a;WindowAgg 帧优化与节点去重背景关键词解释本优化主要修改内容描述提交信息提交描述源码解读optimize_window_clauses 函数核心逻辑拆解函数时序图新增结构体类型 SupportRequestOptimizeWindowClause优化后的效果帧优化 sql 用例查询计划输出节…

行业要闻|正式落地!新思科技宣布完成对Ansys的收购

2025年7月17日——新思科技&#xff08;Synopsys, Inc.&#xff0c;纳斯达克股票代码&#xff1a;SNPS&#xff09;宣布完成对Ansys的收购。该交易旨在整合芯片设计、IP核以及仿真与分析领域的领先企业&#xff0c;助力开发者快速创新AI驱动的产品。在扩大至310亿美元的总潜在市…

Elasticsearch 基础速成 5 步跑通索引、文档、映射与查询

1 准备工作运行环境 curl -fsSL https://elastic.co/start-local | sh # 一条命令拉起本地单节点集群 # 浏览器打开 http://localhost:5601 进入 Kibana → DevTools → Console已有云端或 Serverless 集群可以直接跳到第 2 步。操作界面 以下所有请求均可在 Kibana → DevT…

语音表示学习论文总结

语音表示学习&#xff08;Speech Representation Learning&#xff09;是语音信号处理与机器学习交叉领域的核心技术&#xff0c;其目标是通过数据驱动的方式&#xff0c;从原始语音信号中自动提取具有判别性、鲁棒性和泛化能力的特征表示&#xff0c;以替代传统手工设计的声学…

国产芯+单北斗防爆终端:W5-D防爆智能手机,助力工业安全通信升级

在石油石化、煤矿开采、电力检修等高危行业&#xff0c;防爆设备的定位精度、通信可靠性及供应链安全性直接决定作业安全与生产效率。传统防爆手机依赖GPS定位与进口芯片&#xff0c;存在信号盲区、数据泄露风险及断供隐患。针对此&#xff0c;我们推出W5-D防爆智能终端&#x…

Kafka简述及学习课程

Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c;搜索和其他用户的行动&#xff09;是在现…

BLE PHY 帧结构

BLE&#xff08;低功耗蓝牙&#xff09;的 PHY&#xff08;物理层&#xff09;帧结构根据传输模式&#xff08;广播、数据&#xff09;和 PHY 类型&#xff08;1M、2M、Coded PHY&#xff09;有所差异&#xff0c;但基本框架一致。以下是 BLE PHY 帧的通用结构及各部分含义&…

海外货运 app 系统架构分析

一、引言海外货运业务涉及众多复杂环节&#xff0c;从货物揽收、仓储管理、运输调度到最后交付&#xff0c;需要一个高效、稳定且功能全面的 APP 系统来协调各方资源&#xff0c;提升物流效率&#xff0c;保障货物安全准确送达。本文将对海外货运 APP 系统架构进行详细剖析&…