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 相关文章推荐
在网页中控制wmplayer播放器
Jul 01 Javascript
基于jQuery的树控件实现代码(asp.net+json)
Jul 11 Javascript
JavaScript基本编码模式小结
May 23 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
Aug 01 Javascript
jQuery Ztree行政地区树状展示(点击加载)
Nov 09 Javascript
动态加载css方法实现和深入解析
Jan 18 Javascript
一个基于react的图片裁剪组件示例
Apr 18 Javascript
详解处理bootstrap4不支持远程静态框问题
Jul 20 Javascript
jQuery实现的简单日历组件定义与用法示例
Dec 24 jQuery
微信小程序的mpvue框架快速上手指南
May 15 Javascript
Vue数据双向绑定底层实现原理
Nov 22 Javascript
Vertx基于EventBus发送接受自定义对象
Nov 16 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
一段防盗连的PHP代码
2006/12/06 PHP
php文档更新介绍
2011/07/22 PHP
php后门URL的防范
2013/11/12 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
基于jQuery的表格操作插件
2010/04/22 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Python过滤列表用法实例分析
2016/04/29 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
Python实现矩阵相乘的三种方法小结
2018/07/26 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
Python递归实现打印多重列表代码
2020/02/27 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
英国森林假期:Forest Holidays
2021/01/01 全球购物
商务主管岗位职责
2013/12/08 职场文书
建筑设计专业求职自我评价
2014/03/02 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
化工专业求职信
2014/07/01 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
廉政承诺书
2015/01/19 职场文书
大二学年个人总结
2015/03/03 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python