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 相关文章推荐
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
Apr 12 Javascript
JavaScript库 开发规则
Jan 31 Javascript
javascript hashtable实现代码
Oct 13 Javascript
JavaScript 动态添加表格行 使用模板、标记
Oct 24 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
Apr 01 Javascript
JS的replace方法详细介绍
Nov 09 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
JavaScript性能优化之小知识总结
Nov 20 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
Sep 25 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
Nov 09 Javascript
js取小数点后两位四种方法
Jan 18 Javascript
基于JavaScript实现省市联动效果
Jun 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 sprintf()函数让你的sql操作更安全
2008/07/23 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
js+html制作简单验证码
2017/02/16 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
Python中的is和id用法分析
2015/01/26 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
介绍一下Make? 为什么使用make
2013/12/08 面试题
班队活动设计方案
2014/01/30 职场文书
教师个人自我鉴定
2014/02/08 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
领导离职感言
2015/08/03 职场文书
诚信教育主题班会
2015/08/13 职场文书
礼仪培训心得体会
2016/01/22 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
导游词之日本富士山
2020/01/06 职场文书
python如何读取.mtx文件
2021/04/22 Python