JS如何实现手机端输入验证码效果


Posted in Javascript onMay 13, 2020

之前在“掘金”上看到这样一个demo 我觉得很有意思,于是今天把它搬下来,记在自己的“小本本”里
也许会对以后的项目有点用,若要自己去实现这样一个案例也能实现,但是可能没有那么“妙”。

想法:

1、使用label标签做显示验证码的框,

2、然后每个label for属性指向同一个 id 为vcode 的input,

3、为了能够触发input焦点, 将input 改透明度样式隐藏,

4、这样就实现了 点击label触发 input焦点,调用键盘。

运行效果:

JS如何实现手机端输入验证码效果

示例代码:

结构部分html:

<div id="app" class="app">
  <h2 class="heading-2">验证码:</h2>
  <div class="v-code">
    <input
        ref="vcode"
        id="vcode"
        type="tel"
        maxlength="6"
        v-model="code"
        @focus="focused = true"
        @blur="focused = false"
        :disabled="telDisabled">

    <label
        for="vcode"
        class="line"
        v-for="item,index in codeLength"
        :class="{'animated': focused && cursorIndex === index}"
        v-text="codeArr[index]"
    >
    </label>
  </div>
</div>

css部分:

<style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    body {
      background-color: #ffffff;
      font-family: -apple-system, PingFang SC, Hiragino Sans GB, Helvetica Neue, Arial;
      -webkit-tap-highlight-color: transparent;
    }
    .app {
      padding-left: 20px;
      padding-right: 20px;
      padding-top: 60px;
      max-width: 320px;
      margin-left: auto;
      margin-right: auto;
    }
    .heading-2 {
      color: #333333;
    }
    .v-code {
      margin-top: 20px;
      display: -webkit-box;
      display: -ms-flexbox;
      display: flex;
      -webkit-box-pack: justify;
      -ms-flex-pack: justify;
      justify-content: space-between;
      -webkit-box-align: center;
      -ms-flex-align: center;
      align-items: center;
      position: relative;
      width: 280px;
      margin-left: auto;
      margin-right: auto;
    }
    .v-code input {
      position: absolute;
      top: 200%;
      opacity:0;
    }
    .v-code .line {
      position: relative;
      width: 40px;
      height: 32px;
      line-height: 32px;
      text-align: center;
      font-size: 28px;
    }
    .v-code .line::after {
      display: block;
      position: absolute;
      content: '';
      left: 0;
      width: 100%;
      bottom: 0;
      height: 1px;
      background-color: #aaaaaa;
      transform: scaleY(.5);
      transform-origin: 0 100%;
    }
    .v-code .line.animated::before {
      display: block;
      position: absolute;
      left: 50%;
      top: 20%;
      width: 1px;
      height: 60%;
      content: '';
      background-color: #333333;
      animation-name: coruscate;
      animation-duration: 1s;
      animation-iteration-count: infinite;
      animation-fill-mode: both;
    }
    @keyframes coruscate {
      0% {
        opacity: 0
      }
      25% {
        opacity: 0
      }
      50% {
        opacity: 1
      }
      75% {
        opacity: 1
      }
      to {
        opacity: 0
      }
    }
  </style>

Javascript部分

1、通过CDN引入vue.js

<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>

2、代码

var app = new Vue({
    el: '#app',
    data: {
      code: '',
      codeLength: 6,
      telDisabled: false,
      focused: false
    },
    computed: {
      codeArr() {
        return this.code.split('')
      },
      cursorIndex() {
        return this.code.length
      }
    },
    watch: {
      code(newVal) {
        this.code = newVal.replace(/[^\d]/g,'')
        if (newVal.length > 5) {
          // this.telDisabled = true
          this.$refs.vcode.blur()
          setTimeout(() => {
            alert(`vcode: ${this.code}`)
          }, 500)
        }
      }
    },
  })

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery实现切换页面布局使用介绍
Oct 09 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
Oct 23 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
Nov 12 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
谈一谈javascript中继承的多种方式
Feb 19 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
Sep 19 jQuery
分析JS单线程异步io回调的特性
Dec 01 Javascript
详解vue更改头像功能实现
Apr 28 Javascript
判断js数据类型的函数实例详解
May 23 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
Jun 04 Javascript
基于JS实现快速读取TXT文件
Aug 25 Javascript
vue 单页应用和多页应用的优劣
Oct 22 Javascript
vue-socket.io接收不到数据问题的解决方法
May 13 #Javascript
Vue关于组件化开发知识点详解
May 13 #Javascript
Vue 中获取当前时间并实时刷新的实现代码
May 12 #Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
May 12 #Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
May 12 #Javascript
JavaScript 接口原理与用法实例详解
May 12 #Javascript
ES5新增数组的实现方法
May 12 #Javascript
You might like
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
JavaScript 特殊字符
2007/04/05 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
微信小程序 首页制作简单实例
2017/04/07 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
Python实现多行注释的另类方法
2014/08/22 Python
Python实现获取某天是某个月中的第几周
2015/02/11 Python
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
就业推荐自我鉴定
2013/10/06 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
经典爱情感言
2015/08/03 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
Python Parser的用法
2021/05/12 Python
详解mysql三值逻辑与NULL
2021/05/19 MySQL