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的IE和Firefox(火狐)兼容性的问题总结及常用例子
May 21 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
Aug 16 Javascript
require.js深入了解 require.js特性介绍
Sep 04 Javascript
详解AngularJS中的http拦截
Feb 09 Javascript
网页挂马方式整理及详细介绍
Nov 03 Javascript
js实现一个简单的数字时钟效果
Mar 29 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
使用JavaScript生成罗马字符的实例代码
Jun 08 Javascript
JS实现的A*寻路算法详解
Dec 14 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
Mar 13 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
Mar 27 Javascript
jQuery 动态粒子效果示例代码
Jul 07 jQuery
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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
最常用的8款PHP调试工具
2014/07/06 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
Python中的pass语句使用方法讲解
2015/05/14 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
财政专业求职信范文
2014/02/19 职场文书
2014植树节活动总结
2014/03/11 职场文书
工作简历自我评价
2015/03/11 职场文书
2015年双拥工作总结
2015/04/08 职场文书
焦裕禄观后感
2015/06/03 职场文书
初中体育教学随笔
2015/08/15 职场文书
Mysql排序的特性详情
2021/11/01 MySQL