微信小程序6位验证码输入框、隐藏光标、letter-spacing失效

微信小程序6位验证码输入框、隐藏光标、letter-spacing失效

有需求要做6位验证码框如下图:

微信小程序6位验证码输入框、隐藏光标、letter-spacing失效

开始分别用6个输入框做这个6个数字,发现在手机上有延时不快速,而且删除部分数字会出问题。

之后想到一个办法:

用一个透明input和假的6个框叠起来。

1.透明input用于用户输入数字

2.6个假的框用于展示数字。

这其中遇到一个棘手的问题,iPhoto手机上如图:

微信小程序6位验证码输入框、隐藏光标、letter-spacing失效

输入的字是隐藏了,光标没法隐藏。为了解决此问题想了以下办法:

1.更改光标颜色,设置透明(没用)

input{
  color: transparent;
 caret-color: transparent!important;
}
 input:first-line {
  color: transparent;
} 

2.增加letter-spacing样式,增加input文字间隔(没用)

input{
  letter-spacing: 50.4rpx!important;
}

3.隐藏光标,找了各种配置input没有确切的隐藏光标方法。但是找到了一种伪隐藏的方法:

就是这个排版用到绝对定位,让input宽度增大,左边超出一大截,超出隐藏,将用户输入的文字长度放超出的部分,即看不到了。

上代码:

wxml:

 <view class="register_photocode">
                    <input type="number" class="register_photocode_input"  maxlength="6" bindinput="bindPhotoCode" focus="{{isphotocode}}" ></input>
                     <view class="register_photocode_ul">
                        <view class="register_photocode_li" wx:for="{{6}}">
                            <view wx:if="{{smsnumber_arr.length===index}}" class="register_photocode_cursor"></view>
                            <text>{{smsnumber_arr[index]}}</text>
                        </view>
                     </view>                     
                </view>

js:

  data: {
    smsnumber: "",
    isphotocode: 0
  },
  bindPhotoCode:function(e){
    let value=e.detail.value
    let smsnumber=this.data.smsnumber
     this.setData({
      smsnumber: e.detail.value,
      smsnumber_arr:[...value]
     })
  },

wxss:

.register_photocode{
  position: relative;//最外层相对定位
}

.register_photocode_ul{
  display: flex;
    justify-content: flex-start;
    align-items: center;
    margin-top: 18rpx;
}
.register_photocode_li{
  width: 64.8rpx;
    height: 64.8rpx;
    line-height: 64.8rpx;
    border-radius: 27rpx;
    border: 1px solid #bbb;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 21.6rpx;
    margin-right: 18rpx;
    text-align: center;
}
.register_photocode input{
  position: absolute;
  left: -100%;//左边超出
  top: 0;
  width: 200%;//宽度加大
  height: 64.8rpx;
  line-height: 64.8rpx;
  opacity: 0;//透明input
  color: transparent;//输入文字颜色透明
  letter-spacing: 50.4rpx!important;
  background: none;
  padding-left: 30.6rpx;
  caret-color: transparent!important;
}
/* .register_photocode input:first-line {
  color: transparent;
} */

//光标隐藏了,模拟一个假的光标
.register_photocode_cursor {
  width: 1px;
  height: 40rpx;
  background-color: #000;
  animation: focus 0.7s infinite;
}
/* 光标动画 */

@keyframes focus {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

微信小程序6位验证码输入框、隐藏光标、letter-spacing失效:https://download.csdn.net/download/qq_41211900/16272218

上一篇:前端—每天5道面试题(2)


下一篇:vsCode eslint消除红线提示