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 相关文章推荐
CSS常用网站布局实例
Apr 03 Javascript
input标签内容改变的触发事件介绍
Jun 18 Javascript
jQuery qrcode生成二维码的方法
Apr 03 Javascript
浅谈angularJS中的事件
Jul 12 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
Aug 21 Javascript
利用vscode调试编译后的js代码详解
May 14 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
Sep 26 Javascript
微信小程序实现文字跑马灯
May 26 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
简单了解vue.js数组的常用操作
Jun 17 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 Javascript
react中的DOM操作实现
Jun 30 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
一个数据采集类
2007/02/14 PHP
php+mysql实现无限级分类
2015/11/11 PHP
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
python语言元素知识点详解
2019/05/15 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
公司前台接待岗位职责
2013/12/03 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
迎元旦广播稿
2014/02/22 职场文书
600字作文之感受大自然
2019/11/27 职场文书