vue中实现验证码输入

vue验证码input输入解决焦点切换

有点晚了就不吐槽了,咱还是把代码上了,赶紧洗澡,养好精神明天努力上班!!!
想学node,想学react,想精进webpack,想vue学的更好一点,了解底层代码,学算法,学计算机原理,想写自己的博客网站…
这是一条学无止境的路,没办法要恰饭

效果
在这里插入图片描述
html部分

<div class="verifyCode">
	<input 
		type="text"
		v-for="p in inputNums" 
		:key="p"
		@input="inputFun($event,p)"
		:value="code[p-1]"
		:class="{success: code[p-1]}"
	>
</div>

js部分

export default{
	props: {
		inputNums: {
			type: Number,
			default: 6
		},
		value: {
			type: String,
			default: ''
		}
	},
	data(){
		return {
			code: this.value.split('')
		}
	},
	watch: {
		value(newVal){
			this.code = newVal.split('');
		},
		code(newVal){
			this.$emit('input',newVal.join(''));
		}
	},
	methods: {
		//1.监听用的键入,每次键入都替换掉焦点输入框的值
		//2.输入框的值只能有一位
		inputFun(e,p){
			let ele = e.target;
			let siblingsNode = ele.parentNode.children;
			if(!e.data){//删除
				this.$delete(this.code,p-1);
				if(p <= 2){//边界值
					p = 2;
				}
				siblingsNode[p-2].focus();
				return false;
			}
			let value = e.target.value.replace(/\W/g,'').slice(-1);
			ele.value = value;
			this.$set(this.code,p-1,value)
			if(p >= siblingsNode.length-1){//边界值
				p = siblingsNode.length-1;
			}
			if(value){//上一个元素获得焦点
				siblingsNode[p].focus();
			}
		}
	}
}
<style scoped lang="scss">
	@mixin border(){
		border: 1px solid #eee;
	}
	.verifyCode{
		input{
			@include border();
			font-size: 14px;
			margin-left: 2px;
			width: 60px;
			height: 60px;
			border-radius: 5px;
			text-align: center;
			&:first{
				margin-left: 0;
			}
			&:focus{
				outline-color: #F56C6C;
			}
			&.success{
				border-color: #67C23A;
				border-width: 1px;
				transition: border-color .5s;
				outline: none;
			}
		}
	}
</style>

调用方法定义一个值,然后用v-model绑定就可以了

<verifyCode v-model="code"></verifyCode>

有用就点个赞哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值