jquery实现免费获取手机验证码倒计时效果

admin 104 0
使用jQuery实现手机验证码倒计时效果,可通过点击按钮触发倒计时,防止重复发送,核心逻辑为:绑定点击事件后,禁用按钮并启动定时器,每秒更新剩余秒数(如60秒倒计时),倒计时结束后恢复按钮状态并启用点击,此方案无需后端配合,纯前端实现,代码简洁,通过jQuery的$(this)快速操作按钮文本与状态,提升用户体验,适用于注册、登录等需验证码的场景。

jQuery实现免费获取手机验证码倒计时效果(附完整代码)

在移动端应用和网站开发中,手机验证码已成为用户身份验证的重要手段,广泛应用于注册、登录、密码重置、支付确认等多个场景,为了提升用户体验并防止恶意请求,实现一个完善的验证码获取倒计时功能至关重要,本文将详细介绍如何使用jQuery轻松实现这一功能,无需依赖任何第三方付费服务,完全免费且易于集成到您的项目中。

准备工作

在开始实现之前,我们需要做好以下准备工作:

引入jQuery库

确保您的项目中已正确引入jQuery库,推荐使用CDN方式引入,这样可以利用缓存加速加载:

<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/jquery.min.js"></script>

提示:如果您有特定的jQuery版本需求,可以替换上述链接中的版本号,对于生产环境,建议使用稳定版本而非最新测试版。

基础HTML结构

创建包含手机号输入框、验证码获取按钮及相关表单元素的基本结构:

<div class="verify-container">
    <input type="tel" id="phone" placeholder="请输入手机号" maxlength="11" autocomplete="off">
    <button id="getVerifyCode" class="verify-btn">获取验证码</button>
    <input type="text" id="code" placeholder="请输入验证码" autocomplete="off">
    <div id="message" class="message"></div>
</div>

完整实现步骤

HTML结构设计

设计一个简洁而功能完整的表单结构,包含必要的输入元素和交互按钮:

<div class="verify-container">
    <input type="tel" id="phone" placeholder="请输入手机号" maxlength="11" autocomplete="off">
    <button id="getVerifyCode" class="verify-btn">获取验证码</button>
    <input type="text" id="code" placeholder="请输入验证码" autocomplete="off">
    <div id="message" class="message"></div>
</div>

提示:添加autocomplete="off"属性可以防止浏览器自动填充,提高表单控制的准确性。

CSS样式美化

为表单元素添加美观的样式,并定义倒计时期间的禁用状态样式:

.verify-container {
    display: flex;
    flex-direction: column;
    gap: 12px;
    max-width: 320px;
    margin: 20px auto;
    padding: 20px;
    border-radius: 8px;
    background-color: #f9f9f9;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
.verify-container input {
    padding: 12px 15px;
    border: 1px solid #ddd;
    border-radius: 4px;
    font-size: 14px;
    transition: border-color 0.3s;
}
.verify-container input:focus {
    border-color: #007bff;
    outline: none;
    box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
}
.verify-btn {
    padding: 12px 20px;
    background-color: #007bff;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    font-size: 14px;
    font-weight: 500;
    transition: all 0.3s ease;
    position: relative;
    overflow: hidden;
}
.verify-btn:hover:not(:disabled) {
    background-color: #0056b3;
    transform: translateY(-1px);
    box-shadow: 0 4px 8px rgba(0, 123, 255, 0.3);
}
.verify-btn:active:not(:disabled) {
    transform: translateY(0);
    box-shadow: 0 2px 4px rgba(0, 123, 255, 0.3);
}
.verify-btn:disabled {
    background-color: #6c757d;
    cursor: not-allowed;
    opacity: 0.7;
}
.message {
    min-height: 20px;
    font-size: 13px;
    color: #dc3545;
    margin-top: 5px;
    display: none;
}
@media (max-width: 480px) {
    .verify-container {
        margin: 10px;
        padding: 15px;
    }
}

提示:添加了响应式设计,确保在移动设备上有良好的显示效果,同时增加了交互反馈,如按钮悬停和点击效果,提升用户体验。

jQuery逻辑实现

以下是完整的jQuery实现代码,包含手机号验证、倒计时功能和模拟发送验证码:

$(document).ready(function() {
    let countdown = 60; // 倒计时初始秒数
    let timer = null; // 存储定时器对象
    let isCounting = false; // 标记是否正在倒计时
    // 显示消息提示
    function showMessage(text, isError = true) {
        const $message = $("#message");
        $message.text(text).show();
        if (isError) {
            $message.css("color", "#dc3545");
        } else {
            $message.css("color", "#28a745");
        }
        // 3秒后自动隐藏消息
        setTimeout(function() {
            $message.fadeOut();
        }, 3000);
    }
    // 点击"获取验证码"按钮
    $("#getVerifyCode").click(function() {
        const phone = $("#phone").val().trim();
        // 1. 手机号格式验证
        if (!phone) {
            showMessage("请输入手机号!");
            return;
        }
        if (!/^1[3-9]\d{9}$/.test(phone)) {
            showMessage("请输入正确的11位手机号!");
            return;
        }
        // 2. 检查是否正在倒计时
        if (isCounting) {
            return;
        }
        // 3. 模拟发送验证码(实际项目中应通过AJAX请求后端接口)
        $.ajax({
            url: "/api/sendVerificationCode", // 替换为实际后端接口
            type: "POST",
            data: {
                phone: phone,
                type: "register" // 可以是register、login、reset等
            },
            dataType: "json",
            success: function(response) {
                if (response.success) {
                    showMessage("验证码已发送至您的手机", false);
                    startCountdown();
                } else {
                    showMessage(response.message || "发送失败,请重试");
                }
            },
            error: function(xhr, status, error) {
                showMessage("网络错误,请稍后重试

标签: #手机验证 #倒计时效