当前位置:首页 > JavaScript

js实现验证码倒计时

2026-03-01 11:52:17JavaScript

实现验证码倒计时功能

验证码倒计时功能通常用于限制用户频繁获取验证码,提升用户体验。以下是使用JavaScript实现验证码倒计时的完整方案:

js实现验证码倒计时

基本实现代码

let countdown = 60;
let timer = null;

function startCountdown(button) {
  button.disabled = true;
  timer = setInterval(() => {
    countdown--;
    button.textContent = `${countdown}秒后重新获取`;

    if (countdown <= 0) {
      clearInterval(timer);
      button.disabled = false;
      button.textContent = '获取验证码';
      countdown = 60;
    }
  }, 1000);
}

// HTML中调用示例
// <button onclick="startCountdown(this)">获取验证码</button>

优化版本(防止重复点击)

function startCountdown(button) {
  if (button.disabled) return;

  let countdown = 60;
  button.disabled = true;

  const timer = setInterval(() => {
    button.textContent = `重新获取(${countdown}s)`;
    countdown--;

    if (countdown < 0) {
      clearInterval(timer);
      button.disabled = false;
      button.textContent = '获取验证码';
    }
  }, 1000);
}

带样式版本

<style>
  .countdown-btn {
    padding: 8px 15px;
    background: #1890ff;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
  }
  .countdown-btn:disabled {
    background: #ccc;
    cursor: not-allowed;
  }
</style>

<button class="countdown-btn" onclick="startCountdown(this)">获取验证码</button>

使用Promise封装

function startCountdown(button, seconds = 60) {
  return new Promise((resolve) => {
    button.disabled = true;
    let remaining = seconds;

    const timer = setInterval(() => {
      button.textContent = `${remaining}秒后重试`;
      remaining--;

      if (remaining < 0) {
        clearInterval(timer);
        button.disabled = false;
        button.textContent = '获取验证码';
        resolve();
      }
    }, 1000);
  });
}

// 调用示例
document.getElementById('verify-btn').addEventListener('click', async function() {
  await startCountdown(this);
  // 倒计时结束后执行的操作
});

注意事项

  • 确保在页面卸载时清除定时器,防止内存泄漏
  • 移动端需要考虑触摸反馈和禁用状态样式
  • 实际项目中建议将倒计时状态保存在服务端,防止客户端篡改

以上实现方案可以根据实际项目需求进行组合和调整,核心逻辑是通过setInterval实现时间递减并更新UI显示。

分享给朋友:

相关文章

验证码实现vue

验证码实现vue

验证码实现(Vue) 在Vue中实现验证码功能通常需要结合前端生成和验证逻辑,以及可能的后端校验。以下是两种常见实现方式: 基于Canvas的图形验证码 通过Canvas动态生成包含随机字符…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

php实现获取验证码

php实现获取验证码

使用GD库生成验证码 在PHP中,可以通过GD库来生成验证码图片。以下是一个简单的实现示例: <?php session_start(); $width = 120; $height = 40…

jquery验证码

jquery验证码

jQuery 验证码实现方法 验证码(CAPTCHA)用于防止自动化脚本提交表单。jQuery 可以与后端结合实现验证码功能。 前端生成和验证 使用 jQuery 生成简单的验证码: // 生成随…

react实现倒计时

react实现倒计时

使用 useState 和 useEffect 实现基础倒计时 以下是一个简单的 React 倒计时组件,从指定时间(如 60 秒)开始倒数: import React, { useState,…

react验证码实现

react验证码实现

验证码生成与验证 在React中实现验证码功能通常涉及生成随机验证码字符串、渲染为图像或文本,并与用户输入进行比对。以下是具体实现方法: 生成随机验证码 使用JavaScript生成随机字符串作为验…