JavaScript验证码倒计时

一、JS验证码倒计时60秒

在很多场景下,页面需要发送短信或者验证码验证用户的身份,但是过于频繁发送一方面会影响用户体验,另一方面也容易让网站受到攻击,所以使用倒计时进行控制是非常必要的。下面的代码演示了如何使用JavaScript实现一个60秒的验证码倒计时:


let time = 60; //倒计时时间
function countdown() {
  let btn = document.getElementById('btn');
  if (time == 0) {
    btn.disabled = false;
    btn.innerHTML = "获取验证码";
    time = 60;
    return;
  } else {
    btn.disabled = true;
    btn.innerHTML = "重新发送(" + time + ")";
    time--;
  }
  setTimeout(function() {
    countdown()
  }, 1000);
}

在上面的代码中,我们定义了一个变量time来记录倒计时时间,初始值为60。当用户点击获取验证码时,按钮会变为不可用状态,同时按钮显示的文字将变为“重新发送(60)”,其中的时间值是从time变量中获取。倒计时的功能通过setTimeout()函数实现,每隔1秒钟会执行一次countdown()函数,直到倒计时结束。

二、JS发送验证码倒计时

很多时候,在用户填写完手机号码并点击按钮发送验证码之后,才开始进行倒计时。下面这段代码演示了如何在点击发送按钮的时候开始倒计时:


let time = 60;
function countdown() {
  let btn = document.getElementById('btn');
  if (time == 0) {
    btn.disabled = false;
    btn.innerHTML = "获取验证码";
    time = 60;
    return;
  } else {
    btn.disabled = true;
    btn.innerHTML = "重新发送(" + time + ")";
    time--;
  }
  setTimeout(function() {
    countdown()
  }, 1000);
}
document.getElementById('sendBtn').addEventListener('click', function() {
  countdown();
});

在代码中,我们为发送按钮绑定了一个click事件,点击按钮会执行countdown()函数开始倒计时。当倒计时结束的时候,按钮将重新变为可用状态,并且按钮文字变为“获取验证码”。

三、JS验证码倒计时代码

下面的代码提供了一种更加通用的方法来实现验证码倒计时,通过传递参数来实现不同时间的倒计时。还可以添加回调函数进行更加灵活的操作:


function countdown(time, btnId, callback) {
  let btn = document.getElementById(btnId);
  btn.disabled = true;
  btn.innerHTML = "重新发送(" + time + ")";
  let timer = setInterval(function() {
    time--;
    btn.innerHTML = "重新发送(" + time + ")";
    if (time == 0) {
      clearInterval(timer);
      btn.disabled = false;
      btn.innerHTML = "获取验证码";
      if (callback) {
        callback();
      }
    }
  }, 1000);
}

在上述的代码中,我们定义了一个countdown()函数,它接收三个参数,分别是倒计时时间、按钮的ID和用于清除倒计时的回调函数。当函数被调用时,按钮会变为不可用状态,并且文字显示为“重新发送(60)”,每隔1秒钟会更新一次时间。当倒计时结束时,按钮会重新变为可用状态,并且文字会变为“获取验证码”,如果传递了回调函数,就会执行回调函数。

四、JS验证码倒计时60秒

下面这段代码提供了另一种实现60秒验证码倒计时的方法,它通过使用setInterval()函数来实现,并且可以在倒计时结束时重置时间:


let time = 60;
let timer = null;
function countdown() {
  let btn = document.getElementById('btn');
  btn.disabled = true;
  timer = setInterval(function() {
    if (time <= 0) {
      clearInterval(timer);
      btn.disabled = false;
      btn.innerHTML = "获取验证码";
      time = 60;
    } else {
      btn.innerHTML = "重新发送(" + time + "s)";
      time--;
    }
  }, 1000);
}

在上述代码中,我们创建了一个变量来记录倒计时时间,初始值为60秒。在countdown()函数中,我们通过setInterval()函数每秒更新一次时间,当倒计时结束时,清除计时器,按钮恢复为可用状态,并且倒计时时间变为60秒。

五、JS获取验证码倒计时

下面这段代码提供了一种获取验证码倒计时的实现方法,通过ajax获取验证码之后开始倒计时:


function getCode() {
  $.ajax({
    type: 'POST',
    url: '/getCode',
    data: {
      phoneNum: $('#phone').val()
    },
    success: function(data) {
      if (data.code == 200) {
        $('#getCode').attr('disabled', true);
        $('#getCode').html('重新发送(60s)');
        var time = 60;
        var countdown = setInterval(function() {
          time--;
          $('#getCode').html('重新发送(' + time + 's)');
          if (time <= 0) {
            clearInterval(countdown);
            $('#getCode').html('获取验证码');
            $('#getCode').attr('disabled', false);
          }
        }, 1000);
      } else {
        alert('验证码获取失败');
      }
    }
  });
}

上述代码中,在点击获取验证码按钮之后,通过ajax向后台请求验证码,获取成功后开始倒计时。在倒计时过程中,按钮会变为不可用状态,倒计时结束之后按钮会重新变为可用状态,按钮文字变为“获取验证码”。

六、JS短信验证码倒计时

下面这段代码提供了一种短信验证码倒计时的实现方法,通过使用cookie来保存倒计时开始的时间和结束的时间,每次刷新页面都会自动进行倒计时:


function setBtnText(time) {
  $('#getCode').html(time + '秒后重新发送');
  $('#getCode').addClass('re-get');
  setTimeout(function() {
    $('#getCode').html('获取验证码');
    $('#getCode').removeClass('re-get');
  }, time * 1000);
}

function timer(btn) {
  var time = getCookie(btn);
  if (time && (new Date().getTime() - time.start) = (time.seconds * 1000)) {
        clearInterval(timer);
        setCookie(btn, '', -1);
      } else {
        setBtnText(Math.floor((time.seconds * 1000 - (new Date().getTime() - time.start)) / 1000));
      }
    }, 1000);
  } else {
    setBtnText(60);
  }
}

$('#getCode').on('click', function() {
  if (!$(this).hasClass('re-get')) {
    setCookie('getCodeBtn', {
      seconds: 60,
      start: new Date().getTime()
    }, 60);
    timer('getCodeBtn');
  }
});

function setCookie(cname, cvalue, seconds) {
  var d = new Date();
  d.setTime(d.getTime() + (seconds * 1000));
  var expires = "expires=" + d.toGMTString();
  document.cookie = cname + "=" + encodeURIComponent(JSON.stringify(cvalue)) + ";path=/;expires=" + expires;
}

function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1);
    if (c.indexOf(name) == 0) {
      var value = c.substring(name.length, c.length);
      return JSON.parse(decodeURIComponent(value));
    }
  }
  return "";
}

在上述代码中,我们将倒计时开始的时间和倒计时结束的时间通过cookie来保存。当点击获取验证码按钮之后,如果没有进行倒计时则开始进行倒计时,如果已经进行了倒计时,则从cookie中读取开始时间和结束时间进行继续倒计时。在倒计时过程中,按钮会变为不可用状态,倒计时结束之后按钮会重新变为可用状态,按钮文字变为“获取验证码”。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/247023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:18
下一篇 2024-12-12 13:18

相关推荐

  • 使用JavaScript日期函数掌握时间

    在本文中,我们将深入探讨JavaScript日期函数,并且从多个视角介绍其应用方法和重要性。 一、日期的基本表示与获取 在JavaScript中,使用Date对象来表示日期和时间,…

    编程 2025-04-28
  • JavaScript中使用new Date转换为YYYYMMDD格式

    在JavaScript中,我们通常会使用Date对象来表示日期和时间。当我们需要在网站上显示日期时,很多情况下需要将Date对象转换成YYYYMMDD格式的字符串。下面我们来详细了…

    编程 2025-04-27
  • JavaScript中修改style属性的方法和技巧

    一、基本概念和方法 style属性是JavaScript中一个非常重要的属性,它可以用来控制HTML元素的样式,包括颜色、大小、字体等等。这里介绍一些常用的方法: 1、通过Java…

    编程 2025-04-25
  • CloneDeep函数在Javascript开发中的应用

    一、CloneDeep的概念 CloneDeep函数在Javascript中是一种深层克隆对象的方法,可以在拷贝对象时避免出现引用关系。使用者可以在函数中设置可选参数使其满足多种拷…

    编程 2025-04-25
  • JavaScript中的Object.getOwnPropertyDescriptors()

    一、简介 Object.getOwnPropertyDescriptors()是JavaScript中一个非常有用的工具。简单来说,这个方法可以获取一个对象上所有自有属性的属性描述…

    编程 2025-04-25
  • JavaScript保留整数的完整指南

    JavaScript是一种通用脚本语言,非常适合Web应用程序开发。在处理数字时,JavaScript可以处理整数和浮点数。在本文中,我们将重点关注JavaScript如何保留整数…

    编程 2025-04-25
  • JavaScript点击事件全方位指南

    一、click事件基础 click事件是最常用的鼠标事件之一,当元素被单击时触发。click事件适用于大多数HTML元素(<a>、<button>)和SVG…

    编程 2025-04-25
  • 详解JavaScript onclick事件

    一、onclick的基础知识 onclick事件是JavaScript中最常用的事件之一,它在用户点击某个HTML元素时触发。通常我们可以通过给元素添加一个onclick属性来绑定…

    编程 2025-04-25
  • JavaScript浅拷贝

    一、什么是浅拷贝 在JavaScript中,浅拷贝是一种将源对象的属性复制到目标对象中的方法。浅拷贝的实现方式有多种,包括直接赋值、Object.assign()、展开运算符、co…

    编程 2025-04-25
  • JavaScript 数组转成字符串

    一、数组转成字符串的基本操作 在 JS 中,将数组转成字符串是一项最基本但也最常见的操作之一。我们可以使用 Array 类型内置的 join() 方法实现。它将数组的元素连接成一个…

    编程 2025-04-25

发表回复

登录后才能评论