美文网首页
微信小程序:验证码功能,解决多个input切换时页面闪烁的问题

微信小程序:验证码功能,解决多个input切换时页面闪烁的问题

作者: 我的小小笔尖 | 来源:发表于2021-10-16 23:52 被阅读0次

    思路:

    1. 6个input框做【验证码显示】,样式:width: 80rpx; height: 80rpx; 设置禁用:disabled="true";

    2. 1个input框做【验证码输入】,样式:width: 0; height: 0; opacity: 0;(通过样式隐藏该input)

    3. 点击6个用于验证码显示的input框时,触发bindtap事件,通过该事件将焦点切换到做验证码输入的input框(利用focus属性),此时系统自动弹出键盘

    4. 用户键盘输入数字或删除数字时,触发bindinput事件,通过该事件将输入值转换成数组,分别显示到6个用于验证码显示的input框(利用value属性)

    page.wxml

      <view class="verifyInfo">
        <view class="title">输入验证码:</view>
        <view class="codeWrap">
          <input type="number" maxlength="1" value="{{verifyCode[0]}}" bindtap="onClickInput" data-index="0" disabled="true"/>
          <input type="number" maxlength="1" value="{{verifyCode[1]}}" bindtap="onClickInput" data-index="1" disabled="true"/>
          <input type="number" maxlength="1" value="{{verifyCode[2]}}" bindtap="onClickInput" data-index="2" disabled="true"/>
          <input type="number" maxlength="1" value="{{verifyCode[3]}}" bindtap="onClickInput" data-index="3" disabled="true"/>
          <input type="number" maxlength="1" value="{{verifyCode[4]}}" bindtap="onClickInput" data-index="4" disabled="true"/>
          <input type="number" maxlength="1" value="{{verifyCode[5]}}" bindtap="onClickInput" data-index="5" disabled="true"/>
        </view>
        <view class="codeWrap2">
          <input type="number" maxlength="6" focus="{{currentInput==999}}" bindinput="onInputHiddenNumber" />
        </view>
        <view class="button">
          <button type="primary" bindtap="onSignin">打卡签到</button>
        </view>
      </view>
    

    page.wxss

    .verifyInfo {
      margin-top: 25rpx;
      background: #ffffff;
    }
    
    .verifyInfo .title {
      padding: 25rpx;
    }
    
    .codeWrap {
      display: flex;
      flex-direction: row;
      justify-content: center;
      align-items: center;
    
      padding-top: 50rpx;
      z-index: 100;
    }
    .codeWrap input {
      width: 80rpx;
      height: 80rpx;
      background: #eeeeee;
      margin: 0 10rpx;
    
      color: orange;
      font-size: large;
      text-align: center;
    }
    
    .codeWrap2 {
      display: flex;
      flex-direction: row;
      justify-content: center;
      align-items: center;
    
      position: relative;
      top: -80rpx;
      z-index: 99;
    }
    .codeWrap2 input {
      background: #eeeeee;
    
      color: orange;
      font-size: large;
      text-align: center;
    
      width: 0;
      height: 0;
      opacity: 0;
    }
    
    .verifyInfo .button {
      padding: 100rpx 0;
    }
    

    page.js

      // 点击input-焦点切换到隐藏的input
      onClickInput: function (e) {
        let index = e.currentTarget.dataset.index
        console.log('index', index)
        this.setData({
          currentInput: 999,
        })
      },
    
      //隐藏的input输入数字验证码-拆分显示
      onInputHiddenNumber: function (e) {
        let value = "" + e.detail.value
        // 存储输入的数字
        this.setData({ hiddenNumber: value })
        // 输入的数字转数组
        let arr = value.split('')
        for(let i=0; i<6; i++) {
          let certain = 'verifyCode['+i+']'    
          if(typeof(arr[i])!='undefined') {    
            this.setData({ [certain]: arr[i] })
          }else {
            this.setData({ [certain]: '' })
          }
        }
      },
    

    相关文章

      网友评论

          本文标题:微信小程序:验证码功能,解决多个input切换时页面闪烁的问题

          本文链接:https://www.haomeiwen.com/subject/dwsioltx.html