vue 实现 手机号中间4位分格输入框(暂无选中标识

vue 实现 手机号中间4位分格输入框

效果图

bash 复制代码
<!--4位分格输入框-->
<!--<template>
  <div>
    <div style="display: flex;">
      <div class="phone-input">
        <input
          v-for="(digit, index) in digits"
          :key="index"
          type="tel"
          :ref="`input-${index}`"
          v-model="digits[index]"
          maxlength="1"
          @input="handleInput(index)"
          @keydown="handleKeyDown(index, $event)"
          @focus="handleFocus(index)"
          class="digit"
          :class="{ 'active': activeIndex === index }"
        >
      </div>
      <div class="getCode" @click="validatePhoneNumber">获取验证码</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      digits: ['', '', '', '', '', '', '', '', '', '', ''],
      activeIndex: ''
    }
  },
  methods: {
    /*handleInput(index) {
      if (this.digits[index] && index < this.digits.length - 1) {
        this.focusNextInput(index);
      }
    },*/
    handleInput(index) {
      // Don't allow input to jump to next if the current index is 3 or 4
      if ((index === 3 || index === 4) && this.digits[index]) {
        return;
      }

      // Handle input logic for other cases
      if (this.digits[index] && index < this.digits.length - 1) {
        this.focusNextInput(index);
      }
    },
    handleKeyDown(index, event) {
      if (event.key === 'Backspace' && index > 0 && !this.digits[index]) {
        event.preventDefault();
        this.focusPreviousInput(index);
      }
      if (index===0&&event.key === 'Backspace') {
        this.activeIndex = '';
      }
    },
    handleFocus(index) {
      this.activeIndex = index;
    },
    /*focusNextInput(index) {
      this.$refs[`input-${index + 1}`][0].focus();
    },*/
    focusNextInput(index) {
      if (index === 2) {
        this.$refs[`input-${index + 2}`][0].focus();
      } else {
        this.$refs[`input-${index + 1}`][0].focus();
      }
    },
    focusPreviousInput(index) {
      this.$refs[`input-${index - 1}`][0].focus();
    },
    validatePhoneNumber() {
      const phoneNumber = this.digits.join('');
      // Perform phone number validation logic here
      // 针对手机号进行校验逻辑的代码
      this.activeIndex = '';
    }
  },
  mounted() {
    this.$nextTick(() => {
      // Focus on the first input when the component is mounted
      // this.$refs[`input-0`][0].focus();

      this.$nextTick(() => {
        const phone = '13240865213'; // Replace with actual phone number
        for (let i = 0; i < this.digits.length; i++) {
          if (i < 3 || i > 6) {
            this.digits[i] = phone[i];
          }
        }
        this.$refs[`input-3`][0].focus();
      });
    });
  },
  computed: {
    inputs() {
      return this.$refs.inputs;
    }
  }
}
</script>

<style>
.phone-input {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 40px;
  width: 615px;
}

.phone-input input {
  width: calc(100% / 11);
  height: 100%;
  border: solid 1px #ededed;
  margin-right: 15px;
  outline: none;
  text-align: center;
  font-size: 16px;
  border-radius: 6px;
  color: #0075ff;
}

.phone-input input.active {
  border-color: #0075ff;
}

.getCode {
  width: 120px;
  height: 40px;
  line-height: 40px;
  border: solid 1px #ededed;
  border-radius: 20px;
  color: #666;
  font-size: 16px;
  text-align: center;
}

.getCode:hover {
  cursor: pointer;
}
</style>-->          <el-table-column type="selection" width="55" align="center"></el-table-column>
相关推荐
花开盛夏^.^7 小时前
电脑打开多个浏览器Web窗口占用较大的运行内存的原因
前端·浏览器
Dxy12393102168 小时前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷8 小时前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
馒头不想说话8 小时前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
椒哥10 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
风骏时光牛马10 小时前
生成一个AI稳定性治理及疑难问题分析标题,只需要一个标题,不需要其他的任何文本。
前端
莫西干式秃头11 小时前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen11 小时前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健11 小时前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒11 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端