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 相关文章推荐
javascript 判断数组是否已包含了某个元素的函数
May 30 Javascript
JS记录用户登录次数实现代码
Jan 15 Javascript
页面装载js及性能分析方法介绍
Mar 21 Javascript
使用js Math.random()函数生成n到m间的随机数字
Oct 09 Javascript
分析了一下JQuery中的extend方法实现原理
Feb 27 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
Jun 03 Javascript
webpack+vue.js快速入门教程
Oct 12 Javascript
Vue 过渡实现轮播图效果
Mar 27 Javascript
vue自定义底部导航栏Tabbar的实现代码
Sep 03 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
Apr 30 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
Nov 04 Javascript
鸿蒙系统中的 JS 开发框架
Sep 18 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水印技术
2007/02/14 PHP
php str_replace的替换漏洞
2008/03/15 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
Python中itertools模块用法详解
2014/09/25 Python
Python的标准模块包json详解
2017/03/13 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
为什么会有内存对齐
2016/10/10 面试题
Java的类与C++的类有什么不同
2014/01/18 面试题
英语硕士生求职简历的自我评价
2013/10/15 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
产品售后服务承诺书
2014/05/21 职场文书
年度评优评先方案
2014/06/03 职场文书
导游词格式
2015/02/13 职场文书
婚庆司仪开场白
2015/05/29 职场文书
小学教师读书笔记
2015/07/01 职场文书
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL