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 相关文章推荐
js使用函数绑定技术改变事件处理程序的作用域
Dec 26 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
Jan 29 Javascript
js实现按钮控制图片360度翻转特效的方法
Feb 17 Javascript
jquery实现简单的二级导航下拉菜单效果
Sep 07 Javascript
javascript实现uploadify上传格式以及个数限制
Nov 23 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
Sep 26 jQuery
浅谈webpack 自动刷新与解析
Apr 09 Javascript
微信小程序模拟cookie的实现
Jun 20 Javascript
vue实现点击当前标签高亮效果【推荐】
Jun 22 Javascript
通过JavaScript下载文件到本地的方法(单文件)
Mar 17 Javascript
vue Element左侧无限级菜单实现
Jun 10 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
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
一套.net面试题及答案
2016/11/02 面试题
采购主管工作职责
2013/12/12 职场文书
创业资金计划书
2014/02/06 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
护士医德考评自我评价
2015/03/03 职场文书
处罚决定书范文
2015/06/24 职场文书
Mysql 设置boolean类型的操作
2021/06/04 MySQL
Python实现简繁体转换
2021/06/07 Python
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis