手机端实现6位短信验证码input输入框效果(样式及代码方法)
微信移动端4位、6位、多位验证码密码输入框功能的实现代码,实现思路:
方案1:
写一个简单的input框。

评估:样式不好看,待定。
方案2:
就是用6个input框,每输入一个数字之后,切换到下一个input,即切换focus,删除的时候,同理。自测发现安卓机很流畅,但ios微信端并不是那么流畅,ios默认输入法输入也有点瑕疵。

评估:感叹一下万能的安卓,吐槽下wechat里ios版本更新慢,该方案可能要pass。
方案3:
用6个span标签。即放置一个输入框,隐藏其文字和位置,label>span*6。

评估:解决了绝大多数问题,很多公司都是类似的方案。
最终结果:
由于工程紧迫项目小,还考虑到一些其他外部原因,我们美丽的产品大人拍板了第一种方案。虽说兜兜转转又回到了圆点,但是大人给我的启发实实不可忽略。
下面是我开Vue工程,打的demo:
下面是Vue工程demo代码:
<template>
<div class="input-captcha-20190115">
<h3>栗子1:简单的input框</h3>
<div class="input-box">
<input v-model.trim="simpleInput0" type="number" placeholder="请输入六位数字验证码">
</div>
<br>
<br>
<h3>栗子2:由六个span代替输入框</h3>
<div class="input-box">
<div class="tips">用六个span代替输入框:</div>
<label class="simple-input-content" for="simpleInput1">
<span class="highlight">{{simpleInput1.slice(0,1)}}</span>
<span :class="simpleInput1.length > 1?'highlight':''">{{simpleInput1.slice(1,2)}}</span>
<span :class="simpleInput1.length > 2?'highlight':''">{{simpleInput1.slice(2,3)}}</span>
<span :class="simpleInput1.length > 3?'highlight':''">{{simpleInput1.slice(3,4)}}</span>
<span :class="simpleInput1.length > 4?'highlight':''">{{simpleInput1.slice(4,5)}}</span>
<span :class="simpleInput1.length > 5?'highlight':''">{{simpleInput1.slice(5,6)}}</span>
</label>
<div class="tips">要隐藏的输入框:</div>
<input id="simpleInput1" v-model.trim="simpleInput1" type="number" placeholder="请输入六位数字验证码">
</div>
<br>
<br>
<h3>栗子3:由六个input组成</h3>
<div class="input-box">
<div class="input-content">
<input v-model.trim.number="input0" ref="input0" @keydown.8="deleteValue('input0','input0')" @keyup="changeValue($event,'input0','input1')" type="number" placeholder="空">
<input v-model.trim.number="input1" ref="input1" @keydown.8="deleteValue('input1','input0')" @keyup="changeValue($event,'input1','input2')" type="number" placeholder="空">
<input v-model.trim.number="input2" ref="input2" @keydown.8="deleteValue('input2','input1')" @keyup="changeValue($event,'input2','input3')" type="number" placeholder="空">
<input v-model.trim.number="input3" ref="input3" @keydown.8="deleteValue('input3','input2')" @keyup="changeValue($event,'input3','input4')" type="number" placeholder="空">
<input v-model.trim.number="input4" ref="input4" @keydown.8="deleteValue('input4','input3')" @keyup="changeValue($event,'input4','input5')" type="number" placeholder="空">
<input v-model.trim.number="input5" ref="input5" @keydown.8="deleteValue('input5','input4')" @keyup="changeValue($event,'input5','input5')" type="number" placeholder="空">
</div>
</div>
</div>
</template>
View Template Code
<script>
export default {
name: 'inputCaptcha',
data () {
return {
simpleInput0: '',
simpleInput1: '',
input0: '',
input1: '',
input2: '',
input3: '',
input4: '',
input5: ''
}
},
methods: {
deleteValue (inputValue, previousItem) { // 键盘按下时$event,当前input,上一个input
console.log(this[inputValue], this[previousItem])
if (this[inputValue].length > 0) { // 当前有值,清空之
this[inputValue] = ''
} else { // 当前没有值,光标跳转到上一个input,并清空该input值
this.$nextTick(() => {
this.$refs[previousItem].focus()
this[previousItem] = ''
this[inputValue] = ''
})
}
},
changeValue (e, inputValue, nextItem) { // 键盘抬起时$event,当前input,下一个input
console.log(e.keyCode, this[inputValue], this[nextItem])
if (e.keyCode !== 8) {
this.$nextTick(() => {
this.$refs[nextItem].focus() // 截取当前值最后一位,跳到下一个input
this[inputValue] = (this[inputValue]).toString().slice(-1)
})
}
}
}
}
</script>
View JavaScript Code
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="less">
.input-captcha-20190115 {
min-height: 200px;
.input-box {
min-height: 100px;
box-shadow: 0 0 5px 1px black;
border-radius: 8px;
width: 100%;
max-width: 500px;
display: inline-block;
padding: 20px;
box-sizing: border-box;
input {
vertical-align: middle;
}
& + .input-box {
margin-top: 20px;
}
// 六个span时的样式
.simple-input-content {
label {
padding: 20px;
}
span {
vertical-align: middle;
border: 1px solid silver;
display: inline-block;
height: 20px;
width: 20px;
&.highlight {
border-color: purple;
}
}
}
// 六个input时的样式
.input-content {
padding: 20px;
input {
width: 20px;
height: 20px;
text-align: center;
}
}
/* 去掉input[type=number]浏览器默认的icon显示 */
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button { // chrome
-webkit-appearance: none;
appearance: none;
margin:;
}
input{ // 火狐
-moz-appearance:textfield;
}
}
}
</style>
View Style Code
Vue挂载标签<div id="app20190115"></div>样式:
<style>
#app20190115 {
text-align: center;
color: #2c3e50;
border: 1px solid silver;
}
.tips {
color: #666
}
</style>
Vue工程demo中的知识点:
手机端实现6位短信验证码input输入框效果(样式及代码方法)的更多相关文章
- java 随机生成6位短信验证码
生成6位随机数字其实很简单,只需一行代码,具体如下: String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000) ...
- Web项目中手机注册短信验证码实现的全流程及代码
最近在做只能净化器的后台用户管理系统,需要使用手机号进行注册,找了许久才大致了解了手机验证码实现流程,今天在此和大家分享一下. 我们使用的是榛子云短信平台, 官网地址:http://smsow.zhe ...
- C# 生成6位短信验证码
1 private string VerifyCode() 2 { 3 Random random = new Random(); 4 return random.Next(100000, 99999 ...
- 四:java调接口实现发送手机短信验证码功能
1.点击获取验证码之前的样式: 2.输入正确的手机号后点击获取验证码之后的样式: 3.如果手机号已经被注册的样式: 4.如果一个手机号一天发送超过3次就提示不能发送: 二:前台的注册页面的代码:reg ...
- SSH2框架实现注冊发短信验证码实例
这两天開始写程序了,让用SSH2框架,曾经没有接触过Java项目更没有接触过SSH2框架,所以用注冊開始了我Java之旅.后来发现,后台代码挺easy理解的,跟.net的差点儿相同.就是层与层之间的调 ...
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...
- Java 生成六位短信验证码
在<Java 生成三位随机数>中,简要介绍了使用Java生成三位随机数的方法,前几天在工作中遇到生成6位短信验证码的需求,验证码由6位随机数字构成,不包含字母.6位随机数通常用作短信验证码 ...
- asp.net mvc 短信验证码
把发短信功能写成一个类包,需要引用: SmsUtillity.cs: using System; using System.Collections.Generic; using System.Linq ...
- Django商城项目笔记No.6用户部分-注册接口-短信验证码实现celery异步
Django商城项目笔记No.4用户部分-注册接口-短信验证码实现celery异步 接上一篇,如何解决前后端请求跨域问题? 首先想一下,为什么图片验证码请求的也是后端的api.meiduo.site: ...
随机推荐
- Spring mvc之SimpleUrlHandlerMapping
1.配置文件如下 <bean id="method" class="com.xx.controller.xxxController" scope=&quo ...
- js 计算两个日期之间 相差几年几月几日
1.计算日期差 Mine.vue <!-- 我的 --> <template> <div> <!-- 标题栏 --> <x-header :lef ...
- 理解Android线程创建流程(转)
/android/libcore/libart/src/main/java/java/lang/Thread.java /art/runtime/native/java_lang_Thread.cc ...
- Windows——cmd findstr 字符串查找增强使用说明
在文件中寻找字符串. 复制代码代码如下: FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file] [ ...
- 《modern operating system》 chapter 6 DEADLOCKS 笔记
DEADLOCKS Both processes are blocked and will remain so forever. This situation is called a deadlock ...
- 如何离线分析Kafka海量业务消息?1分钟快速为您支招
场景介绍 说起Kafka,许多使用者对它是又爱又恨.Kafka是一种分布式的.基于发布/订阅的消息系统,其极致体验让人欲罢不能,但操心的运维.复杂的安全策略.可靠性易用性的缺失等,仍需要使用者付出诸多 ...
- OC基础:Date
NSDate 日期类,继承自NSObject,代表一个时间点 NSDate *date=[NSDate date]; NSLog(@"%@",date); //格林尼治时间, ...
- c中常用的关键字static const volatile
在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数 ...
- [办公应用]从美国带回来的兄弟牌brother打印机如何处理
周末帮朋友去调一台国外带回来的brother一体机,型号MFC-J630W.这是她单位老板从国外带回来的,说是便宜:不过她说只有英文说明书,她不太会操作.我想这还不容易么,就满口答应下来了.我先到br ...
- atom及其插件activate-power-mode下载安装
Atom是Github推出的一个文本编辑器,其中包含很多插件可以自行下载安装,其中一个最近比较火的就是插件activate-power-mode,可以实现打字屏振效果, 打字带特效哦,所以最近就尝试安 ...