一、技术栈 uniapp+vue3+javascript 二、实现的效果 全部代码可见:https://github.com/zzm319/study-summarize.git(分支为code-login)。 1、进入页面第一个输入框自动聚焦 2、输入后下一个输入框自动聚
一、技术栈uniapp+vue3+javascript 二、实现的效果全部代码可见:https://github.com/zzm319/study-summarize.git(分支为code-login)。 1、进入页面第一个输入框自动聚焦 2、输入后下一个输入框自动聚焦 3、点击输入区域自动聚焦到无值的第一个输入框(当前一个输入框无值时后一个输入框无法聚焦 ) 4、可以复制粘贴填充也可以短信验证码一键登录 5、监听键盘的删除键(Backspace)删除输入的验证码 三、实现逻辑及代码1、HTML部分:利用循环渲染4个输入框,第一个输入框可输入最大长度无值时为4(为了复制和验证码填充赋值),有值时最大可输入长度为1。
2、javascript部分:1)进入页面第一个输入框自动聚焦:
2. 输入后下一个输入框自动聚焦,主要是给输入框监听输入事件,判断是否有值,有值就自动聚焦下一个输入框:
3)点击输入区域自动聚焦到无值的第一个输入框(当前一个输入框无值时后一个输入框无法聚焦 ),主要是给输入框区域判定一个点击事件,判断当前哪个输入框无值则聚焦:
4)监听粘贴事件赋值给每个输入框,主要是利用给第一个输入框赋值后,然后给剩下的三个输入框重新赋值(短信验证码填充同理):
注意的是,二次粘贴时需要先重置第一个输入框的最大可输入长度:
5)监听键盘的删除键(Backspace)删除输入的验证码:
3、完整javascript代码:
四、遇到的问题1、聚焦实现 由于uniapp使用input是通过封装原生input标签实现的,使用ref获取input dom节点的方式,不能调用focus方法实现聚焦,所以采用原生的获取dom方法实现:
2、循环渲染input的方法,当某个输入框的值改变其它输入框也跟着改变 原因是我fill()了一个对象,这种方式相当于四个输入框的值都是同一个对象。
3、在做点击输入区域,让焦点自动聚焦到无值的第一个输入框时,发现点击输入框不能实现,点击输入框之间的间隔可以实现。 原因:我给每个输入框设置了diabled属性,让其在上一个输入框有值时才能使用。
4、ios的safari浏览器中,验证码填充背景颜色会为黄色: (ps:网上有很多种方法:改变背景色,改变阴影填充等,本人试了都不能实现,下面的方法在iphone14 ios版本为16.1.1中亲测有效)
|
2021-10-12
2021-05-12
2020-05-01
2018-01-16
2019-07-09