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 相关文章推荐
JQuery调用WebServices的方法和4个实例
May 06 Javascript
js取模(求余数)隔行变色
May 15 Javascript
JavaScript中使用document.write向页面输出内容实例
Oct 16 Javascript
js面向对象之公有、私有、静态属性和方法详解
Apr 17 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
Jan 18 Javascript
利用vue实现模态框组件
Dec 19 Javascript
解决jquery appaend元素中id绑定事件失效的问题
Sep 12 jQuery
vue.js响应式原理解析与实现
Jun 22 Javascript
详解微信小程序自定义组件的实现及数据交互
Jul 22 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
Jul 23 Javascript
VUE前后端学习tab写法实例
Aug 06 Javascript
Vue学习之常用指令实例详解
Jan 06 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
mysql建立外键
2006/11/25 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
javascript之锁定表格栏位
2007/06/29 Javascript
用户注册常用javascript代码
2009/08/29 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
子页向父页传值示例
2013/11/27 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
Django 拆分model和view的实现方法
2019/08/16 Python
简单的Python调度器Schedule详解
2019/08/30 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
艺术设计专业个人求职信
2014/04/10 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
运动会演讲稿
2014/05/07 职场文书
建筑投标担保书
2014/05/20 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
个园导游词
2015/02/04 职场文书