uniapp中基于vue3实现输入验证码功能

devtools/2024/11/14 13:10:55/

实现效果
在这里插入图片描述
描述
使用uniapp和vue3实现了手机获取验证码后,输入验证码的输入框功能

具体实现代码
下述代码为实现验证码输入框封装的组件VerificationCodeInput.vue

javascript"><template><view class="container"><view class="input-container"><view v-for="index in 4" :key="index" class="verify-input"><inputtype="number"class="input-field":ref="`input${index - 1}`":maxlength="1":focus="focusIndex === index - 1"@input="handleInput(index - 1, $event)"@focus="handleFocus(index - 1)"/></view></view></view>
</template><script lang="ts" setup>
import { ref, onMounted, nextTick } from 'vue'// 焦点索引
const focusIndex = ref(0)
// 输入值数组
const values = ref<string[]>(['', '', '', ''])
// 输入框ref数组
const inputRefs = ref<(HTMLInputElement | null)[]>([])/*** 处理每个输入值函数* @param index - 序号.* @param event - 输入事件对象.*/
const handleInput = (index: number, event: Event) => {// 获取输入框的值const input = event.target as HTMLInputElementconst value = input.valueif (value) {// 更新输入值数组values.value[index] = value// 判断是否还有下一个输入框,如果有则聚焦if (index < 3) {nextTick(() => {focusIndex.value = index + 1const nextInput = inputRefs.value[index + 1]nextInput?.focus()})}// 判断是否所有输入框都已经有值,如果有则触发完成事件if (values.value.every((v) => v.length > 0)) {handleComplete()}} else {// 如果输入值为空,则聚焦前一个输入框if (index > 0) {focusIndex.value = index - 1nextTick(() => {const prevInput = inputRefs.value[index - 1]prevInput?.focus()})}}
}// 处理焦点事件
const handleFocus = (index: number) => {focusIndex.value = index
}// 处理完成事件
const handleComplete = () => {const code = values.value.join('')console.log('验证码输入完成:', code)
}onMounted(() => {// 初始化焦点nextTick(() => {const firstInput = inputRefs.value[0]firstInput?.focus()})
})
</script><style>
.input-container {display: flex;justify-content: space-between;
}.verify-input {width: 60px;height: 60px;display: flex;justify-content: center;align-items: center;
}.input-field {width: 100%;height: 100%;text-align: center;font-size: 24px;border: none;border-bottom: 2px solid #ccc;outline: none;
}
</style>

最后在父组件中引入VerificationCodeInput.vue即可实现上图效果
在这里插入图片描述


http://www.ppmy.cn/devtools/114009.html

相关文章

2024年10月蓝桥杯青少组的Stema考试开始报名

10月STEMA考试报名已于9月18日&#xff08;今日&#xff09;8:00正式开启啦&#xff01;这次只有scratch图形化编程、Python编程、C编程&#xff01; 本次10月考期与以往有所不同&#xff0c;将为孩子们带来更多的成长机会和更大的挑战&#xff1a; STEMA考试前60%可参加省考&…

软考中级软件设计师——存储系统

软考中级软件设计师——存储系统 存储系统&#xff08;层次结构&#xff09;存储系统分类高速缓存CacheCache组成Cache的三种地址映像Cache的性能分析 主存的扩展位扩展和字扩展主存的编址虚拟存储器磁盘存储器 存储系统&#xff08;层次结构&#xff09; 核心&#xff1a;在存…

idea使用阿里云服务器运行jar包

说明&#xff1a;因为我用的阿里云服务器不是自己的&#xff0c;所以一些具体的操作可能不太全面。看到一个很完整的教程&#xff0c;供参考。 0. 打包项目 这里使用的是maven打包。 在pom.xml中添加以下模块。 <build><plugins><plugin><groupId>org…

改进YOLOv7 | 在 ELAN 模块和 ELAN-H 模块中添加 【CA】【ECA】【CBAM】【SE】注意力机制 | 附详细结构图

YOLOv7改进:在ELAN和ELAN-H模块中添加注意力机制 引言 YOLOv7的ELAN和ELAN-H模块是其高效的关键。通过在这些模块中引入注意力机制,可以进一步提升模型的特征提取能力,提高检测精度。本文将详细介绍如何在YOLOv7的ELAN和ELAN-H模块中添加CA、ECA、CBAM和SE注意力机制,并提…

如何通过网络找到自己想要的LabVIEW知识?

学习LabVIEW或其他编程技术时&#xff0c;无法依赖某一篇文章解决所有问题。重要的是通过多种途径获取灵感&#xff0c;并学会归纳总结&#xff0c;从而逐渐形成系统性的理解。这种持续学习和总结的过程是技术提升的基础。通过网络找到所需的LabVIEW知识可以通过以下几个步骤进…

九龙坡区工业操作系统生态论坛暨蓝卓supOS集成商赋能行成功举办

9月13日&#xff0c;蓝卓成功举办“九龙坡区工业操作系统生态论坛暨蓝卓supOS集成商赋能行&#xff08;西南站&#xff09;”。 本次活动立足工业操作系统开放共赢生态圈&#xff0c;共同探讨推动产业数字化转型&#xff0c;赋能新质生产力。 共生共赢 加速推进工业操作系统生…

Axure设计之表格列冻结(动态面板+中继器)

在Web端产品设计中&#xff0c;复杂的表格展示是常见需求&#xff0c;尤其当表格包含大量列时&#xff0c;如何在有限的屏幕空间内优雅地展示所有信息成为了一个挑战。用户通常需要滚动查看隐藏列&#xff0c;但关键信息列&#xff08;如ID、操作按钮等&#xff09;在滚动时保持…

vue2、vue3生成二维码

Vue2版&#xff1a; 工具&#xff1a;使用 qrcodejs插件来生成二维码 安装&#xff1a;npm install qrcodejs2 qrcodejs官网地址&#xff1a; https://davidshimjs.github.io/qrcodejs/https://davidshimjs.github.io/qrcodejs/ 代码示例&#xff1a; <template><…