vue实现验证码按钮倒计时功能

本人最近开始尝试学习vue.js。想使用vue写一个小例子,就选择做验证码按钮倒计时功能。

上网上搜了一下,也把他们的代码试了一下,自己出了很多问题。所以,需要写一篇基础入门的文章,避免后面人采坑。

这是按照网上写的HTML页面

<div class="register-pannel" id ="register-pannel">
      <div class="register-l" align="center">
        <div class="input-group" style="width: 300px;">
          <input type="text" class="form-control" placeholder="邮箱/手机号/用户名" style="height: 40px;" />
          <span class="glyphicon glyphicon-user form-control-feedback" aria-hidden="true" />
        </div>
        <br />
        <div class="input-group" style="width: 300px;">
          <input type="text" class="form-control" placeholder="密码" style="height: 40px;" />
          <span class="glyphicon glyphicon-lock form-control-feedback" />
        </div>
        <br />
        <div class="input-group" style="width: 300px;">
          <input type="text" class="form-control" placeholder="手机号" style="height: 40px;" />
          <span class="glyphicon glyphicon-phone form-control-feedback" />
        </div>
        <br />
        <div class="input-group" style="width: 300px;">
            <span class="register-msg-btn" v-show="show" v-on:click="getCode">发送验证码</span>
            <span class="register-msg-btn" v-show="!show">{{count}} s</span>
          <input type="text" class="form-control" placeholder="验证码" style="float: right; height: 40px; width: 150px;" />
          <span class="glyphicon glyphicon-font form-control-feedback" />
        </div>
        <br />
        <span class="btn-register">注册</span>
      </div> 

js写成

<script>
<span style="white-space: pre;">      </span>data(){
<span style="white-space: pre;">      </span>return {
<span style="white-space: pre;">        </span>show: true,
<span style="white-space: pre;">        </span>count: '',
<span style="white-space: pre;">        </span>timer: null,
<span style="white-space: pre;">      </span>}
<span style="white-space: pre;">    </span>},
<span style="white-space: pre;">    </span>methods:{
<span style="white-space: pre;">      </span>getCode(){
<span style="white-space: pre;">        </span>const TIME_COUNT = 60;
<span style="white-space: pre;">        </span>if (!this.timer) {
<span style="white-space: pre;">          </span>this.count = TIME_COUNT;
<span style="white-space: pre;">          </span>this.show = false;
<span style="white-space: pre;">          </span>this.timer = setInterval(() => {
<span style="white-space: pre;">            </span>if (this.count > 0 && this.count <= TIME_COUNT) {
<span style="white-space: pre;">              </span>this.count--;
<span style="white-space: pre;">            </span>} else {
<span style="white-space: pre;">              </span>this.show = true;
<span style="white-space: pre;">              </span>clearInterval(this.timer);
<span style="white-space: pre;">              </span>this.timer = null;
<span style="white-space: pre;">            </span>}
<span style="white-space: pre;">          </span>}, 1000)
<span style="white-space: pre;">        </span>}
<span style="white-space: pre;">      </span>}
<span style="white-space: pre;">    </span>}
</script> 

发现浏览器一直报错Uncaught SyntaxError: Unexpected token {

所以按照官方文档的格式,把js的结构改成

<script>
    new Vue({
      el:'.register-pannel',
      data:{
        show:true,
        timer:null,
        count:''
      },
      methods:{
        getCode(){
          this.show = false;
          const TIME_COUNT = 60;
          if (!this.timer) {
            this.count = TIME_COUNT;
            this.show = false;
            this.timer = setInterval(() => {
              if (this.count > 0 && this.count <= TIME_COUNT) {
                this.count--;
              } else {
                this.show = true;
                clearInterval(this.timer);
                this.timer = null;
              }
            }, 1000)
          }
        }
      }
    });
    </script> 

于是格式是没有问题了,但是样式并没有生效。变成了另一个样子。

上网上搜了很多。

有说是js引用顺序的问题。

有说是将js写进window.onload的。试了一下,发现都不对。

后来,在官方文档中发现了el属性:为实例提供挂载元素。值可以是 CSS 选择符,或实际 HTML 元素,或返回 HTML 元素的函数。

所以改成

<script>
 new Vue({
  el:'.register-pannel', //注册div的class
  data:{
  show:true,
  timer:null,
  count:''
  },
  methods:{
  getCode(){
   this.show = false;
   const TIME_COUNT = 60;
   if (!this.timer) {
   this.count = TIME_COUNT;
   this.show = false;
   this.timer = setInterval(() => {
    if (this.count > 0 && this.count <= TIME_COUNT) {
    this.count--;
    } else {
    this.show = true;
    clearInterval(this.timer);
    this.timer = null;
    }
   }, 1000)
   }
  }
  }
 });
</script>

效果就出来了。

总结

以上所述是小编给大家介绍vue实现验证码按钮倒计时功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)

    前言: 此事例是在vue组件中,使用canvas实现倒计时动画的效果.其实,实现效果的逻辑跟vue没有关系,只要读懂canvas如何实现效果的这部分逻辑就可以了 canvas动画的原理:利用定时器,给定合理的帧数,不断的清除画布,再重绘图形,即呈现出动画效果. 让我们先看下效果 说明:此gif清晰度很低,因为转成gif图的时候,质量受损,帧数减少,所以倒计时转到红色时候看起来变的很模糊.但是实际在浏览器上效果全程都是很清晰和连贯的 使用 npm npm install vue-canvas-co

  • vue中多个倒计时实现代码实例

    下面给出一个效果图,我今天要说的就是实现下图这种多个倒计时 很多时候我们做只有一个倒计时的情况比较多,比较简单只需要一个定时器setInterval,算出来赋赋值就好, 但是需要多个倒计时的时候我们就要考虑把倒计时封装成通用的方法了 拿我自己的vue项目举个例 <!-- template --> <div v-for="(item,index) in list" :key="index" class="act_item">

  • 基于vue2.0的活动倒计时组件countdown(附源码下载)

    这是一款基于vue2.0的活动倒计时组件,可以使用服务端时间作为当前时间,在倒计时开始和结束时可以自定义回调函数.   查看演示       下载源码 安装 npm install vue2-countdown --save 使用组件 首先在模板部分添加: <template> <div> <count-down v-on:start_callback="countDownS_cb(1)" v-on:end_callback="countDown

  • Vue写一个简单的倒计时按钮功能

    在项目开发里,我们经常会遇到发送验证码.点击了之后有60秒倒计时的按钮,很常见却也很简单,但是在写这个按钮的时候有个别地方还要注意下,今天写出来,如有问题欢迎指正! 完成的效果如下: 为了更快显示出效果,我把时间设成了5秒.按钮在点击之后会出现倒计时,同时按钮变为不可点击状态,样式也发生变化,鼠标悬浮上的样子也会发生变化. 接下来我们用代码来实现: <button class="button" @click="countDown"> {{content}

  • vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)

    我发现好多倒计时的插件,刷新都会变成从头再来,于是自己用vue2.0写了一个,测试通过,直接上代码 如下是组件代码: <template> <span :endTime="endTime" :callback="callback" :endText="endText"> <slot> {{content}} </slot> </span> </template> <sc

  • 基于vue的短信验证码倒计时demo

    最近做了一个小的demo,分享给大家,在很多地方都能用到. 一般获取短信验证码的时候会用到这个demo: button里面包两个span标签,根据点击状态,显示不同的span,关键代码就是倒计时: <div id="example"> <button @click="send"> <span v-if="sendMsgDisabled">{{time+'秒后获取'}}</span> <span

  • vue中倒计时组件的实例代码

    子组件: <template> <span :endTime="endTime" :callback="callback" :endText="endText"> <slot> {{content}} </slot> </span> </template> <script> export default { data(){ return { content: ''

  • 简单实现vue验证码60秒倒计时功能

    本文实例为大家分享了vue验证码倒计时60秒的具体代码,供大家参考,具体内容如下 html <span v-show="show" @click="getCode">获取验证码</span> <span v-show="!show" class="count">{{count}} s</span> js data(){ return { show: true, count: ''

  • 基于vue2的canvas时钟倒计时组件步骤解析

    今天给大家介绍一款基于vue2的canvas时钟倒计时组件,这个时钟倒计时组件采用canvas动画的炫酷动画效果形式,根据剩余时间的多少变换颜色和旋转扇形的速度,适合抢购.拍卖.下注等业务场景,且对移动端友好. 具体步骤分析: 假如设定倒计时总时间为15s, 变黄色时机为10s,变红色时机为5s. 1.开始倒计时后颜色为绿色.绿色含义是:倒计时的时间离结束时间还很长. 2.10s后变黄色.黄色的含义是:倒计时的时间离结束时间挺近了,起警告作用.动画中,出现快速旋转的扇形. 3.5s后变红色.红色

  • Vue验证码60秒倒计时功能简单实例代码

    template <template> <div class='login'> <div class="loginHeader"> <input type="tel" class="loginBtn border-bottom" placeholder="请输入手机号" /> <input type="tel" class="codeBtn&q

随机推荐