模拟输入密码光标移动

模拟输入密码

1、html
<div class="password">
    <input type="text" value="" maxlength="6">
    <div class="showPart">
        <i class="active"><b></b></i>
        <i><b></b></i>
        <i><b></b></i>
        <i><b></b></i>
        <i><b></b></i>
        <i><b></b></i>
    </div>
</div>
2、js
$(function () {
    var my = {
        init: function () {
            this.show();
            this.onFun();
        },
        show: function () {
            var txts = document.getElementsByTagName('input');
            for (var i = 0; i < txts.length; i++) {
                var t = txts[i];
                t.index = i;
                t.setAttribute('readonly', true);
                t.onkeyup = function (e) {
                    if (e.keyCode !== 8) {
                        var next = this.index + 1;
                        if (next > txts.length - 1) return;
                        txts[next].removeAttribute('readonly');
                        $(txts[next]).focus().addClass('active').siblings('input').removeClass('active');
                    } else {
                        var prev = this.index - 1;
                        if (prev < 0) return;
                        $(txts[prev]).focus().addClass('active').siblings('input').removeClass('active');
                    }
                }
            }
            txts[0].removeAttribute('readonly');
            $('input').focus()
        },
        onFun: function () {
            var _t = this,
                _b = $('body');
            _b
                .on({
                    'input': function () {
                        let _val = $('input').val(),
                            _l = _val.length,
                            _e = $('.showPart i'),
                            _i = _e.eq(_l)
                        $.each(_e,function (i) {
                            let str = _val.split('')[i];
                            !!str ? _e.eq(i).text(str.replace(str,'*')) : _e.eq(i).html('<b></b>')
                        })
                        _i.addClass('active').siblings('i').removeClass('active');
                        if(_l === 6) {
                            _e.eq(5).html('*' + '<b class="last"></b>')
                            /** 请求接口  */
                        }
                    }
                }, 'input')
        },
    my.init()
});
3、css
.password {
    padding: .43rem .86rem 0;
    position: relative;

    .showPart {
        display: flex;
        justify-content: space-between;
    }

    i {
        width: .7rem;
        height: .7rem;
        line-height: .99rem;
        border-radius: .07rem;
        border: 1px solid #E5E5E5;
        text-align: center;
        color: #333;
        font-size: .58rem;

        position: relative;

        &.active {
            border: 1px solid #05BECA;
            box-shadow: 0px 0px 3px 4px rgba(70, 182, 198, 0.18);

            b {
                margin: 0 auto;
                margin-top: .13rem;
                display: block;
                animation: move .8s steps(1, start) infinite;
            }
        }

        b {
            width: 2px;
            height: .43rem;
            background: #05BECA;
            display: inline-block;
            display: none;

            &.last {
                position: absolute;
                right: .2rem;
                top: 0;
            }
        }
    }

    input {
        position: absolute;
        width: 5.8rem;
        height: .7rem;
        opacity: 0;
    }
}
@-webkit-keyframes move {
    0%,
    100% {
        opacity: 0;
    }

    50% {
        opacity: 1;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值