IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 【vue模拟移动端 数字输入框】 -> 正文阅读

[JavaScript知识库]【vue模拟移动端 数字输入框】

前言:看到移动端的密码输入框感觉很好用,想在PC端复现一下

展示图

在这里插入图片描述
我感觉这个输入方式可以有效限制输入的字符数

一、设计思路

每一个框是一个独立的组件,重点是如何监听字符数以及如何切换输入的位置

二、具体实现

HTML

<el-form>
            <el-form-item label="邮编" id="zipCode">
              <el-input v-model="input.one" id="zipone" type="text" maxlength="1" style="width:40px" @focus="changeInput"></el-input>
              <el-input v-model="input.two" id="ziptwo" type="text" maxlength="1" style="width:40px; padding-left:10px;" @focus="changeInput"></el-input>
              <el-input v-model="input.three" id="zipthree" type="text" maxlength="1" style="width:40px; padding-left:10px;" @focus="changeInput"></el-input>
              <el-input v-model="input.four" id="zipfour" type="text" maxlength="1" style="width:40px; padding-left:10px;" @focus="changeInput"></el-input>
              <el-input v-model="input.five" id="zipfive" type="text" maxlength="1" style="width:40px; padding-left:10px;" @focus="changeInput"></el-input>
              <el-input v-model="input.six" id="zipsix" type="text" maxlength="1" style="width:40px; padding-left:10px;" @focus="changeInput"></el-input>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="getFunction('postCode')">校验</el-button>
            </el-form-item>
          </el-form>

JAVASCRIPT

const input = reactive({
      one: null,
      two: null,
      three: null,
      four: null,
      five: null,
      six: null
    })

    const output = reactive({
      postCode: ''
    })

    const zipCode = reactive(['zipone', 'ziptwo', 'zipthree', 'zipfour', 'zipfive', 'zipsix'])

在写的时候发现el-input里面嵌套了很多层,因此使用getElementsByTagName无法准确捕捉到相关标签对象,因此定义了不同的id
当输入字符串长度 = 设置的最大长度
焦点应该移到下一个input
因此先找出当前input id,找到对应zipCode的下一个input id
然后focus()这个id,光标就会移动到这里

删除也是一样,找前一个input id

我觉得我这个方法写的很复杂,如果有更好的改进方法可以跟我交流

/**更新input状态 */
    const changeInput = (event) => {
      var nextZip = ''
      document.getElementById(event.target.id).addEventListener('keyup', function () {
        if (event.target.value.length === event.target.maxLength) {
          zipCode.filter((x, index) => {
            if (x === event.target.id) {
              index === zipCode.length - 1 ? nextZip = zipCode[index] : nextZip = zipCode[index + 1]
            }
          })
          document.getElementById(nextZip).focus()
        } else if (event.target.value.length === 0) {
          zipCode.filter((x, index) => {
            if (x === event.target.id) {
              index === 0 ? nextZip = zipCode[index] : nextZip = zipCode[index - 1]
            }
          })
          document.getElementById(nextZip).focus()
        }
      })
    }
 /**调取不同方法 */
    const getFunction = (type) => {
      switch (type) {
        case 'postCode':
          var num = input.one + input.two + input.three + input.four + input.five + input.six
          output.postCode = isPostCode(num)
          if (output.postCode === true) {
            proxy.$message.success('校验成功')
          } else {
            proxy.$message.error('校验失败!')
          }
          break;

        default:
          break;
      }
    }
const isPostCode = (value) => {
  return /^[1-9][0-9]{5}$/.test(value.toString())
}

export default isPostCode
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:22:00  更:2022-02-26 11:23:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:04:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码