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 冒号 使用说明
Jun 06 Javascript
简单的Jquery全选功能
Nov 07 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
Nov 13 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
Nov 06 Javascript
多个js毫秒倒计时同时进行效果
Jan 05 Javascript
js获取当前日期时间及其它日期操作汇总
Mar 08 Javascript
JavaScript基础——使用Canvas绘图
Nov 02 Javascript
Vue.js实现移动端短信验证码功能
Mar 29 Javascript
angularJs在多个控制器中共享服务数据的方法
Sep 30 Javascript
js实现跟随鼠标移动的小球
Aug 26 Javascript
vue解决使用$http获取数据时报错的问题
Oct 30 Javascript
原生js实现文件上传、下载、封装等实例方法
Jan 05 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
10个可以简化php开发过程的MySQL工具
2010/04/11 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
javascript中length属性的探索
2011/07/31 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
js验证账户名是否重复
2020/05/26 Javascript
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
Python中的字典遍历备忘
2015/01/17 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
海蓝之谜英国官网:La Mer英国
2020/01/15 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
优秀中专生推荐信
2013/11/17 职场文书
银行求职推荐信范文
2013/11/30 职场文书
安全宣传标语口号
2014/06/06 职场文书
2014年财政工作总结
2014/12/10 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
工程主管竞聘书
2015/09/15 职场文书