【uniapp】六格验证码输入框实现

效果图

在这里插入图片描述

代码实现

<view>
	<view class="tips">
	    已发送验证码至
	    <text class="tips-phone">{{ phoneNumber }}</text>
	</view>
	<view class="code-input-wrap">
	    <input class="code-input" v-model="codeNumber" type="number" :adjust-position="false" :auto-blur="true" maxlength="6" @input="handleInputClick" />
	    <view class="code-list">
	        <block v-for="(item, index) in 6" :key="index">
	            <view :class="['code-list-item', codeNumber.length == index ? 'active-item' : '']">{{ codeNumber[index] }}</view>
	        </block>
	    </view>
	</view>
	<view class="resending" v-if="isSending">{{ '重新发送(' + counter + 's)' }}</view>
	<view class="normal" v-else @click="handleResend">重新发送</view>
</view>
data() {
    return {
        phoneNumber: '',
        codeNumber: '',
        isPhoneValid: false,
        isCodeValid: false,
        isSending: false, // 验证码是否在发送中
        // 计时器对象
        timer: null,
        // 倒数60秒
        counter: 60
    }
},
methods: {
    // 输入验证码
    handleInputClick(e) {
        let val = e.detail.value
        this.codeNumber = val
        if (val && val.length == 6) {
            this.isCodeValid = true
        } else {
            this.isCodeValid = false
        }
    },
    // 获取验证码
    sendSmsCode() {
        if (this.isPhoneValid) {
            // 判断手机号格式是否符合要求
            if (!/^1[3456789]\d{9}$/.test(this.phoneNumber)) {
                uni.showToast({
                    title: '手机号格式不正确',
                    icon: 'none'
                })
                return false
            }
            // 判断复选框
            if (!this.isChecked) {
                this.showTips = true
                return false
            }
            // 调用接口,此处代码省略······
        }
    },
    // 倒计时
    countDown() {
        this.counter = 60
        this.isSending = true
        this.timer = setInterval(() => {
            this.counter--
            if (this.counter < 0) {
                this.reset()
            }
        }, 1000)
    },
    // 重置倒计时
    reset() {
        this.isSending = false
        if (this.timer) {
            clearInterval(this.timer)
            this.counter = 60
            this.timer = null
        }
    },
    // 重新发送
    handleResend() {
        this.codeNumber = ''
        this.sendSmsCode()
    }        
}
.tips {
    font-size: 28rpx;
    font-weight: 400;
    line-height: 36rpx;

    .tips-phone {
        font-weight: bold;
        margin-left: 20rpx;
    }
}

// 验证码输入
.code-input-wrap {
    margin: 40rpx 0;
    position: relative;
    height: 100rpx;

    .code-input {
        position: absolute;
        left: 0;
        top: 0;
        height: 100rpx;
        width: 100%;
        opacity: 0;
        z-index: 99;
        outline: none;
    }
    .code-list {
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100rpx;
        display: flex;
        justify-content: space-between;
        .code-list-item {
            // flex: 1;
            width: 90rpx;
            height: 100rpx;
            background: #ffffff;
            border-radius: 16rpx;
            font-size: 36rpx;
            font-weight: 700;
            color: #adb3ba;
            line-height: 100rpx;
            text-align: center;
            margin-right: 10rpx;
            z-index: 5;
            box-sizing: border-box;
        }
        .code-list-item:last-child {
            margin-right: 0;
        }
        .active-item {
            border: 2rpx solid #ff466d;
        }
    }
}
.resending {
    font-size: 28rpx;
    font-weight: 500;
    line-height: 36rpx;
    margin-bottom: 60rpx;
    color: #a6acb2;
}
.normal {
    font-size: 28rpx;
    font-weight: 500;
    line-height: 36rpx;
    margin-bottom: 60rpx;
    color: #333;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

公司不重视软件测试,新来的阿里P8给我们撰写了测试用例编写规范

测试用例(Test Case)是指对一项特定的软件产品进行测试任务的描述&#xff0c;体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等&#xff0c;最终形成文档。 1&#xff09;能看懂需求文档&#xff0c;找准测试测试依…

unittest与pytest自动化测试框架

引言   前面一篇文章已经介绍了python单元测试框架&#xff0c;大家平时经常使用的是unittest&#xff0c;因为它比较基础&#xff0c;并且可以进行二次开发&#xff0c;如果你的开发水平很高&#xff0c;集成开发自动化测试平台也是可以的。而这篇文章主要讲unittest与pytes…

【接口自动化测试】一步一步教你搭建接口环境

要做接口测试&#xff0c;我们得搭建一套本地可以运行的接口环境。这次我选择了一个搭建容易&#xff0c;适合学习的系统——学生管理系统。 Python安装 这套管理系统是Python代码写的&#xff0c;因此需要Python环境。 安装挺无脑的&#xff0c;按照我提供的安装包和方法装…

golang 库之「依赖注入」

文章目录 1. 写在最前面2. 依赖注入2.1 使用场景2.2 框架对比 3. fx 框架使用场景示例3.1 示例3.2 golang 原生的库3.3 fx 库3.4 对比3.4.1 如上两种实现方式对比3.4.2 关于过度设计3.4.3 感悟 4. 碎碎念5. 参考资料 1. 写在最前面 同事在技术分享的时候用了 golang 的 fx 框架…

金融行业的软件测试分析

随着金融行业的业务不断增加&#xff0c;金融交易模式的不断变化&#xff0c;金融机构对信息化的要求也越来越高&#xff0c;高质量的金融软件对于金融机构来说显得尤为重要。如何保证金融行业软件的质量&#xff0c;对金融行业软件的测试人员来说&#xff0c;也提出了更高的要…

我用Devchat开发了公务员报名确认系统自动登录脚本,再也不用担心挤不进去了

#AI编程助手哪家好&#xff1f;DevChat“真”好用 # 演示效果 我用Devchat开发了公务员报名确认系统自动登录&#xff0c;再也不用担心挤不进去了 目录 演示效果前言粉丝独家专属红包码DevChat是什么&#xff1f;DevChat AI编程助手有哪些优势一、安装Vscode1、下载vscode链接…

Leetcode150. 逆波兰表达式求值

Every day a Leetcode 题目来源&#xff1a;150. 逆波兰表达式求值 解法1&#xff1a;栈 用栈模拟逆波兰表示法表示的算术表达式的计算过程。 初始化一个栈 stk。 遍历字符串数组 tokens&#xff0c;根据当前字符串 token 决定操作&#xff1a; 若 token 是 1 个算符&am…

深度学习pytorch之hub模块

pytorchhub模块里面有很多模型 https://pytorch.org/hub/ github网址&#xff1a;https://github.com/pytorch/pytorch import torch model torch.hub.load(pytorch/vision:v0.10.0, fcn_resnet50, pretrainedTrue) # or # model torch.hub.load(pytorch/vision:v0.10.0, fc…

【Linux】进程程序替换

文章目录 替换原理站在进程的角度站在程序的角度初体验及理解原理 替换函数函数解释命名理解exec系列函数与main函数之间的关系在一个程序中调用我们自己写的程序 替换原理 创建子进程的目的是什么&#xff1f; ->想让子进程执行父进程代码的一部分 执行父进程对应的磁盘代码…

k8s存储

nfs 理论上nfs 其实并不是存储设备&#xff0c;它是一种远程共享存储服务。 k8s 存储卷 volume emptyDir&#xff1a;可以实现pod中的容器之间共享数据&#xff0c; 但是存储卷不能持久化数据&#xff0c;且会随着pod的生命周期一起删除。 hostpash&#xff1a;可以实现持久…

SIMULIA--Abaqus结构仿真篇

什么是 SIMULIA? 基于3DEXPERIENCE平台的品牌 多学科多领域的协同仿真与分析优化 三大核心仿真领域&#xff1a;电磁仿真 流体仿真 结构仿真 SIMULIA结构仿真是什么? 对结构进行力学、热学、声学等多学科计算&#xff0c;辅助于设计方案优化.采用数字化技术模拟产品性能&am…

Apifox日常使用(一键本地联调)

背景说明&#xff1a;现在的项目一般都是前后分离&#xff0c;线上出bug或者在进行联调时&#xff0c;有些时候后端需要重复模拟前端数据格式&#xff0c;在使用Apifox的情况下&#xff0c;如何快速造出后端需要的数据呢&#xff1f; 随便找一个网站&#xff0c;点开f12&#…

计算机类同学想要快速找到自己需要的毕设项目看这里

**点个关注不迷路 下面介绍如何快速找到自己需要的项目&#xff1a; 首先打开下面网址 https://www.yuque.com/mick-hanyi/javaweb 关键词搜索 一&#xff1a;pc 端搜索方法 下面是搜索方法举例&#xff1a;下面举得只是例子&#xff0c;具体根据自己得需求输入搜索 然后…

SQL第五次上机实验

1.向图书表&#xff08;Book&#xff09;插入以下记录 USE TSGL GO INSERT INTO Book VALUES(7-5402-1800-3,文学类,边城,沈从文,燕山出版社,10,5,5)2.向借阅表插入以下两条记录 USE TSGL GO INSERT INTO Lend VALUES(201207034201,7-5402-1800-3,00366240,2013-04-22),(2012…

管理员模式运行cmd或则bat文件的时候,出现路径错误的问题

最近在使用Comfyui, 不清楚啥原因&#xff0c;有时候Git无法访问&#xff0c;有时候文件夹无法访问的。就想把它的运行bat命令直接用 管理员模式运行&#xff0c;给到最高的权限&#xff0c;试试。但就这么简单的问题&#xff0c;搜了半天&#xff0c;都是一大堆不靠谱的教程&a…

教你遇到vcomp120.dll无法继续执行代码的解决方法

分享关于vcomp120.dll丢失的4个修复方法。在此之前&#xff0c;我想先简要介绍一下vcomp120.dll的作用以及它是什么。 首先&#xff0c;让我们来了解一下vcomp120.dll的作用。vcomp120.dll是一个动态链接库文件&#xff0c;它是由Microsoft Visual C 2012 Redistributable Pac…

nvm使用教程:node.js的管理工具

假如你有多个项目&#xff0c;每个项目对应node.js版本不同&#xff0c;就可以使用nvm版本管理工具。 都不用自己再去下载node.js了&#xff0c;通过管理工具下载就行 下载地址&#xff1a; https://nvm.uihtm.com/ 找个版本下载即可。 安装到你自定义目录&#xff1a;(除了…

PostgreSQL简介及安装步骤

PostgreSQL简介 PostgreSQL是一款开源的关系型数据库管理系统&#xff0c;具有强大的扩展性、高度的可定制性和可靠的稳定性&#xff0c;因此在企业级应用和开发领域中得到了广泛的应用。本文将介绍PostgreSQL的基本概念以及在各种操作系统上的安装步骤。 安装步骤 1. Window…

Vuex使用一文搞懂

什么是Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 Vuex 是什么&#xff1f; | Vuex (vuejs.org) 图片来源&#xff0c;vuex官方文档 vuex安装 …

【ARM Trace32(劳特巴赫) 使用介绍 3 - trace32 访问运行时的内存】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 1.1 trace32 访问运行时的内存1.1.1 侵入式 运行时内存访问1.1.2 非侵入式运行时访问1.1.3 缓存一致性的非侵入式运行时访问 1.2 Trace32 侵入式和非侵入式 运行时访问1.2.1 侵入式访问1.2.2 非侵入式运行时访问 1…