uniapp 手机验证码输入框实现代码(随机数、倒计时、隐藏手机号码中间四位)可以直接使用

 更新时间:2023年02月22日 08:42:33   作者:xuanlele  
这篇文章主要介绍了uniapp 手机验证码输入框(随机数、倒计时、隐藏手机号码中间四位),实现思路通过创建六个正方形的view,然后创建一个数字input,最大输入长度为六位(根据验证码的长度),再将input隐藏掉,获取到的值分别放到六个view中,需要的朋友可以参考下

如键盘被隐藏,可直接点击蓝框弹出键盘,蓝框就相当于input的光标,验证码输入错误之后会将字体以及边框改为红色,持续1.5s(可自行修改时间),然后清空数据。

<template>
	<view class="code">
		<view class="code-tip-one">请输入验证码
			<view class="code-tip">已向<text>+86 {{phone.substring(0, 3)}}****{{phone.substr(phone.length-4)}}</text>发送验证码</view>
			<view class="code-errow" v-if="codeclolor == '#ff0000'">验证码输入错误</view>
		</view>
		<input class="cinput" adjust-position="false" auto-blur="true" @blur="blur" @input="codenum" :focus="focus"
					value="code" v-model="code" type="number" maxlength="6" />
		<view class="code-input">
			<view v-for="(item,index) in 6" :key="index" @click="codefocus(index)"
						:style='(index == code.length? "border: 5rpx solid #1195db;width: 80rpx;height: 80rpx;line-height: 80rpx;":"color: " + codeclolor + ";" +"border: 2rpx solid" + codeclolor)'>
						{{code[index] && code[index] || ''}}
			</view>
		</view>
		<block v-if="sec!=20">
			<view class="recode">重新发送({{sec}}s)</view>
		</block>
		
		<button @click="getCode()" type="primary" :disabled="verifyShow" style="margin-top: 200rpx;">发送短信</button>
	</view>
</template>
 
<script>
	export default {
		data() {
			return {
				phone:'12345678910',
				// 验证码输入聚焦
				focus: true,//input焦点,用于键盘隐藏后重新唤起
				// 验证码框颜色
				codeclolor: "#313131",//自定义光标的颜色
				// 验证码获取秒数
				sec: '20',//这是重新获取验证码的倒计时(可根据需求修改)
				code: '',//这是用户输入的验证码
				codeCorrect:'',//正确的验证码
				verifyShow:false,//是否禁用按钮
			}
		},
		methods: {
			// 输入验证码
			codenum: function(event) {
				// console.log('输入的值',event.target.value)
				var that = this
				var code = event.target.value
				that.code = code
				if (code.length == 6) {
					if (code == that.codeCorrect) {
		                //输入六位验证码后自动进行验证并执行验证成功的函数
						console.log('验证码正确:',that.code)
					} else {
						console.log('验证码错误!!!:',that.code)
						that.codeclolor = "#ff0000"
						setTimeout(function() {
							that.code = []
							event.target.value = ""
							that.codeclolor = "#313131"
						}, 1500)
					}
				}
			},
			// 键盘隐藏后设置失去焦点
			blur: function() {
				var that = this
				that.focus = false
			},
			// 点击自定义光标显示键盘
			codefocus: function(e) {
				var that = this
				if (e == that.code.length) {
					that.focus = true
				}
			},
			getCode(){//获取验证码
				const that = this
				that.codeCorrect = that.getVerificationCode(6)  //可以不传值,默认为4位随机码
				console.log('生成的随机码为:' + that.codeCorrect)
				that.timedown(that.sec)// 倒计时
			},
			//随机生成几位数
			getVerificationCode(codeLength){ //传入需要的字符串长度,不传默认为4
				// 准备一个用来抽取码的字符串,或者字典
				// let verification_code_str = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  //数字和字母
				let verification_code_str = "0123456789";     //纯数字
				// 获取某个范围的随机整数,封装的函数,在上面抽取字典的时候进行了调用
				function getRandom(min, max) {//意思是获取min-max数字之间的某个随机数,直接调用即可
					return Math.round(Math.random() * (max - min) + min);
				}
				let newStr = '';                    //创建一个空字符串,用来拼接四位随机码
				for (var i = 0; i < codeLength; i++) {       //for循环四次,则拼接四次随机码
					newStr += verification_code_str[getRandom(0, verification_code_str.length - 1)];   //从字典中随机选一个下标,并拼接到空字符串中
				}
				return newStr
			},
			//倒计时
			timedown:function(num){
				let that = this;
				if(num == 0){
					that.verifyShow = false;		 // 不禁用获取验证码按钮
					that.sec = 20	
					return clearTimeout();
				}else{
					that.verifyShow = true;			// 禁用获取验证码按钮
					setTimeout(function() {  
						that.sec = num-1
						that.timedown(num-1);  
					}, 1000);//定时每秒减一  
				}
			},
		}
	}
</script>
 
<style scoped lang="less">
	    .code {
			margin: auto;
			margin-top: 50rpx;
			width: 650rpx;
			height: auto;
		}
	 
	    .code-tip-one {
			width: 650rpx;
			height: 250rpx;
			line-height: 100rpx;
			font-size: 60rpx;
			font-weight: bold;
			color: #313131;
		}
	 
		.code-tip {
			width: 650rpx;
			height: 100rpx;
			line-height: 50rpx;
			font-size: 30rpx;
			font-weight: normal;
			color: #8a8a8a;
		}
	 
		.code-errow {
			width: 650rpx;
			height: 50rpx;
			line-height: 25rpx;
			font-size: 28rpx;
			font-weight: normal;
			color: #ff0000;
		}
	 
		.code-tip>text {
			padding: 0 20rpx;
			width: 650rpx;
			font-size: 30rpx;
			font-weight: normal;
			color: #ff5500;
		}
	 
	    .code-input {
			margin: auto;
			width: 650rpx;
			height: 100rpx;
			display: flex;
		}
	 
		.code-input>view {
			margin-top: 5rpx;
			margin-left: 15rpx;
			width: 86rpx;
			height: 86rpx;
			line-height: 86rpx;
			font-size: 60rpx;
			font-weight: bold;
			color: #313131;
			text-align: center;
			border-radius: 10rpx;
		}
	 
		.code-input>view:nth-child(1) {
			margin-left: 0rpx;
		}
	 
		.cinput {
			position: fixed;
			left: -100rpx;
			width: 50rpx;
			height: 50rpx;
		}
		
		.recode{
			margin-top: 20rpx;
			width: 200rpx;
			height: 80rpx;
			line-height: 80rpx;
			color: #707070;
			font-size: 28rpx;
		}
</style>

实现思路:创建六个正方形的view(使用for循环),然后创建一个数字input,最大输入长度为六位(根据验证码的长度),再将input隐藏掉,获取到的值分别放到六个view中。

其中验证码验证失败之后利用v-model双向绑定进行清空已经输入的值

注意:单纯的输出 code[index] 不会展示空只会展示未定义,必须加上 {{code[index] && code[index] || ''}} 进行判断替换为空,密码输入框替换字符,也就是与或非的意思吧

如果是不想展示验证码信息可以改为{{code[index] && '●' || ''}},这样你输入是参数就会被替换为●●●●●●

到此这篇关于uniapp 手机验证码输入框(随机数、倒计时、隐藏手机号码中间四位)可以直接使用的文章就介绍到这了,更多相关uniapp验证码输入框内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法

    JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法

    这篇文章主要介绍了JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法,涉及JS递归算法操作数组实现排序功能的相关技巧,需要的朋友可以参考下
    2017-01-01
  • 正则表达式在js前端的15个使用场景梳理总结

    正则表达式在js前端的15个使用场景梳理总结

    本篇带来15个正则使用场景,按需索取,收藏恒等于学会!!有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 事件模型在各浏览器中存在差异

    事件模型在各浏览器中存在差异

    根据 W3C DOM 2 Events 描述,EventTarget 接口被所有支持 DOM 事件模型的节点(Node)实现。 该接口提供addEventListener 和removeEventListener方法,用来绑定或解绑一个 EventListeners 接口到一个 EventTarget。
    2010-10-10
  • 获取input标签的所有属性的方法

    获取input标签的所有属性的方法

    下面小编就为大家带来一篇获取input标签的所有属性的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 微信小程序用canvas实现电子签名

    微信小程序用canvas实现电子签名

    这篇文章主要为大家详细介绍了微信小程序用canvas实现电子签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • js中使用replace方法完成某个字符的转换

    js中使用replace方法完成某个字符的转换

    这篇文章主要介绍了js中使用replace方法完成某个字符的转换,比较实用,需要的朋友可以参考下
    2014-08-08
  • JS实现禁止高频率连续点击的方法【基于ES6语法】

    JS实现禁止高频率连续点击的方法【基于ES6语法】

    这篇文章主要介绍了JS实现禁止高频率连续点击的方法,通过事件监听结合定时器实现针对高频率点击的限制操作,该功能基于ES6语法实现,需要的朋友可以参考下
    2017-04-04
  • JS获取图片高度宽度的方法分享

    JS获取图片高度宽度的方法分享

    这篇文章主要介绍了JS获取图片高度宽度的方法,开始的时候没能做到兼容chrome,在度娘和众网友的帮助下,最终完成了完美兼容,这里分享给大家,有需要的小伙伴可以参考下。
    2015-04-04
  • js左侧多级菜单动态的解决方案

    js左侧多级菜单动态的解决方案

    实现的效果很简单,就是点一下显示,再点一下就隐藏,只不过是多了几级的问题。好,现在来说说我的设计思路,首先从第一级别开始,添加如下代码
    2010-02-02
  • 微信小程序实现顶部搜索框

    微信小程序实现顶部搜索框

    这篇文章主要为大家详细介绍了微信小程序实现顶部搜索框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论