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重置(reset)表单的方法
May 05 Javascript
选择复选框按钮置灰否则按钮可用
May 22 Javascript
JavaScript的事件代理和委托实例分析
Mar 25 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
Aug 04 Javascript
用JS生成UUID的方法实例
Mar 30 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
Oct 03 Javascript
javascript实现消灭星星小游戏简单版
Nov 15 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
Sep 30 Javascript
angularjs $http调用接口的方式详解
Aug 13 Javascript
django使用channels2.x实现实时通讯
Nov 28 Javascript
js实现窗口全屏示例详解
Sep 17 Javascript
原生小程序封装跑马灯效果
Oct 21 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
自己动手做一个SQL解释器
2006/10/09 PHP
php数组一对一替换实现代码
2012/08/31 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
Smarty变量用法详解
2016/05/11 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
actionscript与javascript的区别
2011/05/25 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
JS跨域问题详解
2014/11/25 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
解决uWSGI的编码问题详解
2017/03/24 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
Django 连接sql server数据库的方法
2018/06/30 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
Python向excel中写入数据的方法
2019/05/05 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
幼师自荐信范文
2013/10/06 职场文书
大学生个人自我鉴定
2013/12/03 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
Python实现位图分割的效果
2021/11/20 Python
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
Java设计模式之代理模式
2022/04/22 Java/Android
SQL中的连接查询详解
2022/06/21 SQL Server