前提提要
需要实现一个输入验证码功能,并分开展示在框内,不管是h5还是小程序思路是一样的。我们这边的需求是不用单个更改某个输入框的内容,如果想更改,则按顺序去删除重新输入。
思路一:使用多个输入框
优点:灵活性强,可单个操作单元格
缺点:每次输入一个之后,需要手动让后续输入框聚焦
因为我们这边目前不用单个操作,就暂时放弃了这个方法
思路二:使用一个输入框来获取数据,再用一组框来展示数据
用一个input
这在展示内容的框上,给input
设置opacity:0
,用户每次输入的值拿到后依次展示在框内,如果用户输入或者删除就直接体现在展示框上了。
页面内容:
<template>
<div class="code-wrap">
<div class="code-list">
<div>{{ codeValue[0] }}</div>
<div>{{ codeValue[1] }}</div>
<div>{{ codeValue[2] }}</div>
<div>{{ codeValue[3] }}</div>
<div>{{ codeValue[4] }}</div>
<div>{{ codeValue[5] }}</div>
</div>
<input maxlength="6" v-model="codeValue" class="input-top">
</div>
</template>
js内容:
data () {
return {
codeValue: '',
}
}
css内容:
.code-wrap {
position: relative;
.input-top {
// 设置input完全遮盖父元素,且“隐身”
position: absolute;
top: 0;
height: 100%;
// 把输入的值向左隐藏,使其不展示在页面内,防止用户点击到
left: -44px;
right: 0;
font-size: 12px;
}
}
// 展示框样式
.code-list {
display: flex;
width: 275px;
height: 50px;
div {
display: inline-block;
margin-top: 4px;
width: 36px;
height: 48px;
line-height: 48px;
font-size: 30px;
background: #424348;
color: #fff;
text-align: center;
border-radius: 8px;
}
}