美文网首页
uniapp~v3 移动端验证码分割的实现

uniapp~v3 移动端验证码分割的实现

作者: 焚心123 | 来源:发表于2023-08-09 16:16 被阅读0次

    直接打开链接查看效果图(https://mp-91187d2c-1225-4c77-b616-a32b09715ff4.cdn.bspapp.com/cloudstorage/微信图片_20230810154501.png)

    • 具体功能
      1、输入的时候自动分割
      2、粘贴内容直接分割
      3、不能点击某一个进行删除,只能从后面进行删除

    • 具体代码实现
      1、页面template(使用input框定位覆盖在上面,光标是自己写的,当然你也可以用input中letter-spacing实现,有人博客中用这个css属性已实现,uniapp中使用ref获取元素,然后调用blur提示没有这个方法,所以只能放弃)

    • 注意

    input中的maxlength不能一开始写死,否则当你复制的数据大于6之后,input是展示,但是页面效果不会展示,所以做了一个动态的控制,我写的有个小bug,当你输入完最后一个数据,点击最后数据删除的时候,不会显示光标,删除一个数据之后才会展示,原因是下面class的判断有问题,你也可以试着修改下

    <view class="flexr flexcc f40 c25 m-t-72 box" @click="showBtn">
                <template v-for="(item,index) in 6" :key="index">
                    <view class="box-v">{{code[index]}}
                    <view :class="(code.length) == index&&show==1?'ac':''"> 
                    </view>
                    </view>
                </template>
                <input type="number" ref="inp" :maxlength="m"  class="inp f40 c25" v-model="code"  @input="inputFun" >
    </view>
    
    • js 代码
    const data = reactive({
        code:'',//当前的验证码
        show:0,//当用户点击之后在展示光标
        m:-1//maxlength,-1可以无限输入
    })
    const inputFun = e=>{
        if(data.code.length>6){
            data.code = data.code.slice(0,6)    
            data.m=6
        }else if(data.code.length==0){
            data.m = -1
        }
    }
    
    • css代码
          .box{
                position: relative;
                // padding:0 20upx;
                .box-v{
                    width: 74upx;
                    height: 60upx;
                    line-height: 60upx;
                    box-sizing: border-box;
                    text-align: center;
                    padding: 4upx 0;
                    border-bottom: 1upx solid #B6BDD0;
                    position: relative;
                    margin-right: 40upx;
                }
                .box-v:last-child{
                    margin-right: 0;
                }
                .ac{
                    position: absolute;
                    width: 2upx;
                    height: 60upx;
                    background-color: #000;
                    top: 0;
                    left: 20%;
                    transform: translate(-20%);
                    animation: shan 1s linear infinite;
                }
                @keyframes shan {
                    0%{
                        opacity: 0;
                    }
                    100%{
                        opacity: 1;
                    }
                }
                .inp{
                    position: absolute;
                    height: 60upx;
                    width: 100%;
                    // letter-spacing: 84upx;
                    // padding-left: 30upx;
                    // border: 1upx solid #000;
                    opacity: 0;
                }
            }
    
    • 光标展示位置,分割位数都可根据业务需求进行调试
    • 如果对你有帮助,动动你的小手,点个赞吧!

    相关文章

      网友评论

          本文标题:uniapp~v3 移动端验证码分割的实现

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