能用UI库的还是用UI库,没有的再来看看我这个简单的,原生微信小程序
按着uv-ui库里面的验证码输入组件简单仿写的,这个组件库是支持uniapp的,好像不能在原生小程序里面使用
codeLength 来设置验证码的长度,切记数值不要太大, 太大需要自己调整css中code-item的宽高,
如果有bug,欢迎评论指出!
![](https://img-blog.csdnimg.cn/direct/50f988a4fc1e4353a03f52716e6c21aa.gif)
wxml代码
<view class="codes">
<view class="code-item" wx:for="{{codeLength}}" wx:for-index="index" wx:key="index">
<view>{{computedCodeValue[index]}}</view>
<view class="item__cursor" wx:if="{{isFocus && computedCodeValue.length ===index }}"></view>
</view>
<input model:value="{{inputValue}}" bindfocus="inputFocus" bindblur="inputBlur" bindinput="codeInput" class="code-input-son" type="number" maxlength="{{codeLength}}" />
</view>
css代码
.codes {
width: 100%;
position: relative;
box-sizing: border-box;
display: flex;
justify-content: space-between;
padding: 0 10rpx;
margin-top: 172rpx;
gap:0 12rpx;
}
.codes .code-item {
position: relative;
/* width: 128rpx;
height: 128rpx; */
width: 0;
flex: 1;
height: 128rpx;
color: #262626;
font-size: 72rpx;
font-family: "Source Han Sans";
border-radius: 8rpx;
background: #E8E7E7;
display: flex;
align-items: center;
justify-content: center;
}
.codes .code-item .item__cursor {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 1px;
height: 40%;
animation: 1.5s uv-cursor-flicker infinite;
background-color: #000;
}
.codes .code-input-son {
position: absolute;
left: -750rpx;
width: 1500rpx;
height: 128rpx;
top: 0;
background-color: transparent;
text-align: left;
color: #262626;
font-size: 72rpx;
font-family: "Source Han Sans";
}
js代码
const app = getApp();
Page({
data: {
codeLength: 4, // 验证码的长度
inputValue:'', // 输入框的值
computedCodeValue: [], // 验证码的值
isFocus: false // 输入框是否焦点
},
onLoad(options) {},
// 验证码获取焦点
inputFocus() {
this.setData({
isFocus: true,
});
},
// 验证码失去焦点
inputBlur() {
this.setData({
isFocus: false,
});
},
// 验证码输入
codeInput(e) {
console.log(e.detail.value);
this.setData({
computedCodeValue: e.detail.value.split(''),
});
console.log(this.data.computedCodeValue);
},
});