código js para atingir uma contagem regressiva de 60 segundos quando o botão é clicado

Por exemplo, a função de autenticação de SMS do telefone móvel em alguns sites tem um efeito semelhante que, após clicar no botão, faz uma contagem regressiva para 60 segundos antes de clicar em enviar novamente.

Este exemplo usa Javascript para realizar a função de enviar o código de verificação após uma contagem regressiva de 60 segundos após clicar no botão.

Exemplo 1: Javascript realiza o efeito da contagem regressiva de 60 segundos para clicar no botão antes que você possa clicar para enviar novamente

<input type="button" id="btn" value="免费获取验证码" />
<script type="text/javascript">
var wait=60;
function time(o) {
 if (wait == 0) {
  o.removeAttribute("disabled");  
  o.value="免费获取验证码";
  wait = 60;
 } else { 

  o.setAttribute("disabled", true);
  o.value="重新发送(" + wait + ")";
  wait--;
  setTimeout(function() {
  time(o)
  },
  1000)
 }
 }
document.getElementById("btn").onclick=function(){time(this);}
</script>

Exemplo 2: Clique no botão para exibir um código js de contagem regressiva de 60 segundos

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>无标题文档</title> 
<script type="text/javascript" src="js/jquery.js"></script> 
</head> 

<body> 
<input type="button" id="btn" value="免费获取验证码" onclick="settime(this)" /> 
<script type="text/javascript"> 
var countdown=60; 
function settime(val) { 
if (countdown == 0) { 
val.removeAttribute("disabled"); 
val.value="免费获取验证码"; 
countdown = 60; 
} else { 
val.setAttribute("disabled", true); 
val.value="重新发送(" + countdown + ")"; 
countdown--; 
} 
setTimeout(function() { 
settime(val) 
},1000) 
} 
</script> 
</body> 
</html>

Exemplo 3: depois de clicar no botão, ele pode continuar a ser clicado após a contagem regressiva de 60 segundos, e a contagem regressiva pode ser exibida no botão

Renderizações esperadas:

Este é o código na plataforma pública WeChat

function E() {
var e = $("#mobile"), t = (new Date).getTime(), n = Math.floor((t - b) / 1e3);
g && clearTimeout(g), n >= 60 ? (e.prop("readonly", !1), y = !0, $("#sendmobile").html("发送验证码").attr("disabled", !1).removeClass("btn_disabled")) : (e.prop("readonly", !0), y = !1, $("#sendmobile").attr("disabled", !0).addClass("btn_disabled").html("%s秒后可重发".sprintf(60 - n)), g = setTimeout(E, 1e3));
}
function S() {
function e() {
if (!y) return;
var e = $.trim(n.val());
l.mobile(e) ? t.attr("disabled", !1).removeClass("btn_disabled") : t.attr("disabled", !0).addClass("btn_disabled");
}
var t = $("#sendmobile"), n = $("#mobile");
n.keyup(e).blur(e), e(), t.click(function() {
var e;
t.attr("disabled") !== "disabled" && (e = "+86" + $.trim(n.val()), b = (new Date).getTime(), E(), o.post({
url: w ? "/cgi-bin/formbyskey" : "/acct/formbyticket",
data: {
form: "mobile",
action: "set",
f: "json",
mobile: e
},
mask: !1
}, function(e) {
var t = e.BaseResp.Ret;
if (t == 0) u.suc("验证码已经发送"); else {
switch (t) {
case -13:
u.err("登录超时,请重新登录");
break;
case -35:
u.err("该手机已经登记过2次,请使用别的手机号进行用户信息登记");
break;
default:
u.err("验证码发送失败");
}
b = 0;
}
}));
});
}

O editor deste código simplesmente não sabe como chamá-lo em meu próprio código.Depois de ser solicitado por um especialista, tenho algumas ideias.

Idéia do especialista sobre resolução de problemas: se for estrita, também deve ser combinada com o plano de fundo para obter tempo, ou outros podem atualizá-lo.
                            Se não for estrito, um cookie também pode ser usado.

<script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
<script src="http://yukon12345.com/yukon12345.com/js/jquery.cookie.js"></script>
<script>
 time1=$.cookie("time1")||60;
 time2=$.cookie("time2")||60;
 dis1=$.cookie("dis1")
 dis2=$.cookie("dis2")
 function countDown($obj){

 var time;
 if($obj.attr("id")=="b1")
 {
  time=--time1;
  $.cookie("time1",time,{"expires":1});
  if(time<=0){
  time1=60;
  $obj[0].disabled=!$obj[0].disabled
  clearInterval(inter1)
  $obj.text("点击发送")
  $.cookie("dis1","")
  return
  }
 }
 if($obj.attr("id")=="b2")
 { time=--time2;
  $.cookie("time2",time,{"expires":1});
  if(time<=0){
  time1=60;
  $obj[0].disabled=!$obj[0].disabled
  clearInterval(inter2)
  $obj.text("点击发送")
  $.cookie("dis2","")
  return
  }
 }

 $obj.text(time+"秒后重新发送")

 }

 $(function(){
 if(dis1="dis"){
  $("#b1")[0].disabled='disabled'
  inter1=setInterval(function(){countDown($("#b1"))},1000)
 }
 if(dis2="dis"){
  $("#b2")[0].disabled='disabled'
  inter2=setInterval(function(){countDown($("#b2"))},1000)
 }
$(".cd").bind("click",function(){
 $this=$(this);
 //没有被禁用时禁用并执行倒计时
 if(!$this[0].disabled){
 $this[0].disabled='disabled';
 if($this.attr("id")=="b1"){
  $.cookie("dis1","dis",{"expires":1})
  inter1=setInterval(function(){countDown($this)},1000)
 }
 if($this.attr("id")=="b2"){
  $.cookie("dis2","dis",{"expires":1})
  inter2=setInterval(function(){countDown($this)},1000)
 }

 }
})

})
</script>

<button id="b1" class="cd" >点击发送</button><br>
<button id="b2" class="cd" >点击发送</button><br>

Para mais artigos sobre contagem regressiva, consulte o tópico:  "Função de contagem regressiva"

Acho que você gosta

Origin blog.csdn.net/qq_41071754/article/details/110238586
Recomendado
Clasificación