js 实现验证码输入框示例详解

 更新时间:2022年09月21日 11:09:24   作者:名字起太长会有傻子跟着念  
这篇文章主要为大家介绍了js 实现验证码输入框示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

验证码输入框应该是很常见的需求吧,不知道各位小伙伴在在遇到的时候是选择找一找插件还是自己动手撸一个呢?我花了点时间撸了一个出来,实际体验还不错,分享给大家。

思路

我在实现之前肯定也是上网搜了一下的,网上的方式大多是使用多个input标签来实现,但我觉得不太优雅,就自己想了一个方法。使用了6个div标签和一个input标签。验证码长度一般是4位或6位,我这里用6位做演示。

  • 先将6个div使用flex布局平铺。
  • 再将input使用绝对定位覆盖在6个div上面。
  • 监听input元素的input、focus、blur事件,对用户的输入进行处理。

遇到的问题

上述布局在pc端是ok的,但是在移动端会有问题,移动端的光标底部会有个控件,你能够拖动调整光标位置。大概长这个样子,如下图:

不过解决方法也很简单,红色背景是box,蓝色背景是input

  • input宽度设置大一点,同时使用position: absolute; right: 0; top: 0;右对齐
  • box设置overflow: hidden;将左侧多余部分隐藏,这样就看不到光标啦。

为了方便理解,我将top设置为48px,如下图

实际应该是top: 0,如下图

下面是代码,聪明的你一看就明白。

HTML

<div class="box">
    <div class="field-list">
        <div class="field-item"></div>
        <div class="field-item"></div>
        <div class="field-item"></div>
        <div class="field-item"></div>
        <div class="field-item"></div>
        <div class="field-item"></div>
    </div>
    <input class="field-input" type="text" maxlength="6">
</div>

CSS

.box {
    position: relative;
    width: 338px;
    overflow: hidden;
}
.field-list {
    display: flex;
    justify-content: space-between;
}
.field-item {
    box-sizing: border-box;
    width: 48px;
    height: 48px;
    line-height: 46px;
    font-size: 24px;
    text-align: center;
    font-weight: bold;
    border: 1px solid #ccc;
    border-radius: 3px;
}
.field-item-focus {
    border-color: #409EFF;
}
.field-item-focus::before {
    content: '';
    display: block;
    width: 2px;
    height: 30px;
    margin: 8px auto;
    background: skyblue;
    animation: blink 1s steps(1) infinite;
}
@keyframes blink {
    50% {
        opacity: 0;
    }
}
.field-input {
    box-sizing: border-box;
    position: absolute;
    top: 0;
    right: 0;
    width: calc(100% + 60px);
    height: 48px;
    padding: 0;
    border: none;
    outline: none;
    opacity: 0;
    background: transparent;
}

JS

// 获取dom
const fieldList = document.querySelectorAll('.field-item');
const fieldInput = document.querySelector('.field-input');
// 监听input输入事件,只支持输入数字,过滤非数字字符
fieldInput.addEventListener('input', function (e) {
    const v = e.target.value.replace(/[^\d]/g, '');
    e.target.value = v;
    // 考虑粘贴情况,循环赋值
    for (let i = 0; i < 6; i++) {
        fieldList[i].innerHTML = v[i] || '';
    }
    // 移除旧光标
    removeCursor();
    // 计算新光标出现位置
    calcCursorPosition();
});
// focus
fieldInput.addEventListener('focus', function (e) {
    calcCursorPosition();
});
// blur
fieldInput.addEventListener('blur', function (e) {
    removeCursor();
});
// 计算光标出现位置
function calcCursorPosition() {
    const length = fieldInput.value.length;
    if (length < 6) {
        fieldList[length].classList.add('field-item-focus');
    }
}
// 移除光标
function removeCursor() {
    // 最后一位没有光标,?.操作符避免报错
    document.querySelector('.field-item-focus')?.classList.remove('field-item-focus');
}

实现效果

以上就是js 实现验证码输入框示例详解的详细内容,更多关于js 验证码输入框的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript递归详述

    JavaScript递归详述

    这篇文章主要介绍了JavaScript递归,递归就是当一个函数可以调用自己,那么这个函数就是递归,接下俩我们就来看看下面文章的详细介绍内容,需要的小伙伴可以参考一下,希望对你有所帮助
    2021-12-12
  • 微信小程序联网请求的轮播图

    微信小程序联网请求的轮播图

    这篇文章主要介绍了微信小程序联网请求的轮播图的相关资料,需要的朋友可以参考下
    2017-07-07
  • JS对象创建与继承的汇总梳理

    JS对象创建与继承的汇总梳理

    这篇文章主要为大家介绍了JS对象创建与继承的汇总梳理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Javascript版Langchain入门教程解析

    Javascript版Langchain入门教程解析

    这篇文章主要介绍了Javascript版Langchain入门教程解析
    2023-06-06
  • 羊了个羊的中强大的Grid布局

    羊了个羊的中强大的Grid布局

    这篇文章主要为大家介绍了羊了个羊的中强大的Grid布局详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • JS快速检索碰撞图形之四叉树碰撞检测

    JS快速检索碰撞图形之四叉树碰撞检测

    这篇文章主要为大家介绍了JS快速检索碰撞图形之四叉树碰撞检测,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 微信小程序 开发指南详解

    微信小程序 开发指南详解

    这篇文章主要介绍了微信小程序 开发指南详解的相关资料,需要的朋友可以参考下
    2016-09-09
  • 微信小程序 本地存储及登录页面处理实例详解

    微信小程序 本地存储及登录页面处理实例详解

    这篇文章主要介绍了微信小程序 本地存储实例详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • JS算法题解搜索插入位置方法示例

    JS算法题解搜索插入位置方法示例

    这篇文章主要为大家介绍了JS算法题解搜索插入位置方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Java  Spring 事务回滚详解

    Java Spring 事务回滚详解

    这篇文章主要介绍了java Spring事务回滚的相关资料,需要的朋友可以参考下
    2016-10-10

最新评论