vue3制作类微信的六位的密码输入框

简介: vue3制作类微信的六位的密码输入框

这是一个 Vue 3 组件,用于创建一个自定义的密码输入框。这个输入框由6个小输入框组成,每个小输入框只能输入一个字符。当用户在一个小输入框中输入字符后,焦点会自动跳到下一个输入框,直到所有6个输入框都填满为止。当6个字符都输入完成后,会触发一个名为 'input-complete' 的自定义事件,并将输入的密码作为参数传递出去。

下面是代码的详细解释:

模板部分 (<template>)

  • <div class="password-input">: 包裹所有输入框的容器。
  • <input v-for="(item, index) in Array.from({ length: 6 })" :key="index" ref="inputs" v-model="passwords[index]" @input="onInput(index, $event)" maxlength="1" type="password" />: 使用 v-for 指令创建6个输入框。每个输入框绑定到 passwords 数组的一个元素上,并通过 @input 监听输入事件。
  • v-for="(item, index) in Array.from({ length: 6 })": 循环6次以创建6个输入框。
  • :key="index": 为每个输入框设置一个唯一的 key。
  • ref="inputs": 为所有输入框设置一个引用。
  • v-model="passwords[index]": 双向绑定到 passwords 数组的一个元素上。
  • @input="onInput(index, $event)": 当输入框的值改变时,调用 onInput 函数。
  • maxlength="1": 限制每个输入框只能输入一个字符。
  • type="password": 设置输入框类型为密码,这样输入的字符会被遮挡。

脚本部分 (<script setup>)

  • import { ref, onMounted, watch } from 'vue';: 从 Vue 3 中导入所需的函数和API。
  • const passwords = ref(Array(6).fill(''));: 创建一个响应式引用 passwords,初始化为一个包含6个空字符串的数组。
  • function onInput(index, event) {...}: 定义一个函数,当输入框的值改变时被调用。如果当前输入框不是最后一个(索引小于5),则使当前输入框失去焦点,并在下一个可用的输入框上设置焦点。
  • onMounted(() => {...}): 在组件挂载完成后执行一些操作。这里使用 watch 函数来监听 passwords 引用的变化。当 passwords 的值改变时,检查密码的长度是否达到6个字符,如果是,则触发 'input-complete' 事件。

样式部分 (<style scoped>)

  • .password-input input: 为 .password-input 类下的所有 input 元素设置样式。这里设置了宽度、高度、文本对齐方式和外边距。
  • scoped: 这个属性意味着这些样式只适用于当前组件,不会影响其他组件或全局样式
<template>
  <div class="password-input">
    <input v-for="(item, index) in Array.from({ length: 6 })" :key="index"
      ref="inputs" v-model="passwords[index]" @input="onInput(index, $event)" 
      maxlength="1" type="password" />
  </div>
</template>
<script setup>
import { ref, onMounted, watch } from 'vue';
const passwords = ref(Array(6).fill(''));
function onInput(index, event) {
  const input = event.target;
  if (!input.value) return;
  if (index < 5) {
    input.blur();
    setTimeout(() => {
      const nextIndex = index + 1;
      const nextInput = input.nextElementSibling;
      if (nextInput) nextInput.focus();
    }, 0);
  }
}
onMounted(() => {
  watch(passwords, (newVal) => {
    const password = newVal.join('');
    if (password.length === 6) {
      // 触发密码输入完成事件,传递密码值
      emit('input-complete', password);
    }
  });
});
</script>
<style scoped>
.password-input input {
  width: 40px;
  height: 40px;
  text-align: center;
  margin: 0 5px;
}
</style>
相关文章
|
1月前
|
小程序 前端开发 定位技术
【微信小程序】-- 常用视图容器类组件介绍 -- view、scroll-view和swiper(六)
【微信小程序】-- 常用视图容器类组件介绍 -- view、scroll-view和swiper(六)
|
11月前
|
存储 小程序 容器
想做个答题类的微信小游戏?读这篇文章就够了
本文重要内容包含答题类小游戏的制作原理和制作方法,在掌握实现原理和方法后,你也能够根据自己的需要,制作自己的答题类小游戏。 如果你没有任何的游戏开发经验,欢迎阅读我的“人人都能做游戏”系列教程,它会手把手的教你做出自己的第一个小游戏。
148 0
|
缓存 小程序 JavaScript
【微信小程序】缓存数据库操作类——prototype和ES6方法
将post数据在缓存数据库中的key,postList赋值给构造函数的this变量。这个postList必须和初始化数据库时设置的文章数据的key相同,否则无法读取数据。
88 0
|
存储 小程序 数据库
微信小程序云开发日记类日记记录分享动态
微信小程序云开发日记类日记记录分享动态
197 1
微信小程序云开发日记类日记记录分享动态
分享一个微信公众号开发封装类
分享一个微信公众号开发封装类
89 0
|
小程序 前端开发 定位技术
【微信小程序 | 实战开发】常用的视图容器类组件介绍和使用(1)
【微信小程序 | 实战开发】常用的视图容器类组件介绍和使用(1)
318 0
【微信小程序 | 实战开发】常用的视图容器类组件介绍和使用(1)
|
存储 小程序 容器
想做个答题类的微信小游戏?读这篇文章就够了
**这是小蚂蚁游戏开发公众号原创的第71篇。 本文重要内容包含答题类小游戏的制作原理和制作方法,在掌握实现原理和方法后,你也能够根据自己的需要,制作自己的答题类小游戏。
227 0
想做个答题类的微信小游戏?读这篇文章就够了
|
缓存 小程序
|
存储 NoSQL 安全
微信、淘宝类扫码登录是怎么实现的?
首先,介绍下什么是扫码登录。现在,大部分同学手机上都装有qq和淘宝,天猫等这一类的软件。而开发这些app的企业,都有他们相对应的网站。
微信、淘宝类扫码登录是怎么实现的?

热门文章

最新文章