四位/六位手机短信验证码输入框(H5实现)

输入六位(或四位)手机短信验证码是手机端常见的场景,本文记录下H5实现方法:通过隐藏input输入框,再结合六个div输入框展示输入验证码实现。

实现要点

通过定位和透明度将输入框隐藏;监听input输入行为并高亮显示当前输入验证码位置的盒子。

HTML部分

创建容器,容器添加四个显示验证码的格子,以及实际用户输入用到的input输入框。

<div class="code-area">
  <div class="code-item"></div>
  <div class="code-item"></div>
  <div class="code-item"></div>
  <div class="code-item"></div>
  <input maxlength=4 class="code-input" />
</div>

CSS部分

设置四个显示验证码的格子添加边框;将实际input输入框设置为绝对定位,透明度设置为0,覆盖在验证码格子上方。

.code-area {
  display: flex;
  position: relative;
  justify-content: space-between;
  width: 500px;
}

.code-item {
  width: 100px;
  height: 100px;
  margin-left: 10px;
  border: 1px solid #999;
  border-radius: 5px 5px;
  color: #000;
}

.code-input {
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  opacity: 0;
}
.active {
  border: 3px solid #1E80FF !important;
 }

JavaScript部分

监听input框的行为,包括输入、变化、聚焦、失焦。

在输入状态,获取输入框验证码数字,将其展示在验证码格子上,同时动态设置验证码格子激活状态类。

// 获取输入框和展示验证码的四个框
const codeInput = document.querySelector('.code-input');

const codeItems = document.querySelectorAll('.code-item');

const displayCode = () => {
  const curVal = codeInput.value;
  console.log('curVal',curVal)
  Array.from(codeItems).map((item,index) => {
    console.log('codeItems',curVal[index])
    curVal[index] ? item.innerText = curVal[index] : item.innerText = ''
  })
  // console.log(codeItems,typeof codeItems)
}

const resolveActive = (type) => {
  const len = codeInput.value.length;
  Array.from(codeItems).map(item => {
    item.className = 'code-item'
  });
  if (type === 'focus' || type === 'change') {
    codeItems[len === 4 ? (len - 1) : len].className = 'code-item active'
  }
}

codeInput.addEventListener('input', () => {
  displayCode();
  resolveActive('focus');
});

codeInput.addEventListener('focus', () => {
  resolveActive('focus');
})

codeInput.addEventListener('blur', () => {
  resolveActive();
});

codeInput.addEventListener('change', () => {
  displayCode();
  resolveActive('change');
})

codeInput.focus();

最终演示效果
在这里插入图片描述

参考链接

手机端实现6位短信验证码input输入框效果(样式及代码方法)

如何实现一个4位验证码输入框效果

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现输入框短信验证码功能,可以使用 Vue.js 的模板语法和组件化思想,具体实现步骤如下: 1. 创建一个包含输入框和发送验证码按钮的组件。 ```html <template> <div> <input type="text" v-model="code" /> <button @click="sendCode" :disabled="disabled">{{ buttonText }}</button> </div> </template> <script> export default { data() { return { code: '', disabled: false, buttonText: '发送验证码', countdown: 60 } }, methods: { sendCode() { // 发送短信验证码 // ... // 设置倒计时 this.disabled = true; this.buttonText = `${this.countdown}s 后重新发送`; const timer = setInterval(() => { this.countdown--; this.buttonText = `${this.countdown}s 后重新发送`; if (this.countdown === 0) { clearInterval(timer); this.disabled = false; this.buttonText = '发送验证码'; this.countdown = 60; } }, 1000); } } } </script> ``` 2. 在父组件中引入该组件,并监听子组件的输入事件。 ```html <template> <div> <sms-code @input="handleInput" /> <button @click="submit">提交</button> </div> </template> <script> import SmsCode from './SmsCode.vue'; export default { components: { SmsCode }, data() { return { phone: '', code: '' } }, methods: { handleInput(value) { this.code = value; }, submit() { // 提交表单 // ... } } } </script> ``` 在子组件中,使用 `v-model` 来实现与父组件的双向数据绑定。当输入框的值发生变化时,通过 `$emit` 方法将新的值传递给父组件。 ```html <template> <div> <input type="text" v-model="code" @input="$emit('input', code)" /> <button @click="sendCode" :disabled="disabled">{{ buttonText }}</button> </div> </template> <script> export default { data() { return { code: '', disabled: false, buttonText: '发送验证码', countdown: 60 } }, methods: { sendCode() { // 发送短信验证码 // ... // 设置倒计时 this.disabled = true; this.buttonText = `${this.countdown}s 后重新发送`; const timer = setInterval(() => { this.countdown--; this.buttonText = `${this.countdown}s 后重新发送`; if (this.countdown === 0) { clearInterval(timer); this.disabled = false; this.buttonText = '发送验证码'; this.countdown = 60; } }, 1000); } } } </script> ``` 这样就可以实现一个简单的输入框短信验证码功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值