dom语句中验证码倒计时案例的小细节

在我们用dom语句写验证码倒计时时,会遇到几个小问题

 先放源码

<body>
  <ul>
    <li>
      手机号:
      <input type="text">
    </li>
    <li>
      验证码:
      <input type="text" class="verify">
      <button id="btn">获取验证码</button>
    </li>
  </ul>

  <script>
      const btn = document.querySelector('#btn')
      btn.addEventListener('click',function(){
       btn.disabled = true
    // 这行代码非常重要,表示点击之后,按钮立即禁用,可以有效的解决用户瞬间点几下按钮打开多个定时器的bug
        let i = 5
        btn.innerHTML = `${i}秒之后重新获取`
        id = setInterval(function(){
           i--         
           if(i>=1){
           btn.disabled = true
           btn.innerHTML = `${i}秒之后重新获取`
           }else{
             btn.disabled = false
            btn.innerHTML = `获取验证码`
            clearInterval(id)
            
           }
        },1000)
      })
  </script>
</body>

第一个问题,按下按钮,按钮需要过一段时间才能实现禁用效果.

第二个问题,按下按钮,里面的文字不会立刻跳转成(x秒之后重新获取),也需要一段时间.

其实这两个问题属于同一种类型的错误,第一种bug,会导致按钮没有及时禁用,用户能在瞬间点多下按钮,导致打开多个定时器.而第二种bug影响稍小,会在观感上给用户一种延迟的感觉.

这两个bug的原因都是因为实现这俩功能的代码位置放错.下面是放错的源码

 对比第一张图,这个错误代码就是把开头的两个功能代码给注释了.

效果就是点击按钮之后,按钮禁用延迟,验证码读秒延迟.

原因代码运算是从上到下,从结构到函数,所以代码先执行结构,然后再进入函数(我函数里面也写了这两个功能)实现功能.造成延迟.

如何才能让点击按钮事件,立刻实现按钮禁用和验证码读秒呢?

那就是把这两行功能代码直接先写到按钮事件下面,一点击按钮立刻触发!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值