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


Posted in Javascript onApril 10, 2018

本人最近开始尝试学习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>

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

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

上网上搜了很多。

有说是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实现验证码按钮倒计时功能

总结

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

Javascript 相关文章推荐
JQuery Tab选项卡效果代码改进版
Apr 01 Javascript
JavaScript中的方法调用详细介绍
Dec 30 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
Jun 05 Javascript
深入浅析JavaScript面向对象和原型函数
Feb 06 Javascript
Javascript字符串拼接小技巧(推荐)
Jun 02 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
Jul 17 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
浅谈在Vue-cli里基于axios封装复用请求
Nov 06 Javascript
微信小程序template模版的使用方法
Apr 13 Javascript
更强大的vue ssr实现预取数据的方式
Jul 19 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
Mar 17 Javascript
Vue发布订阅模式实现过程图解
Apr 30 Javascript
vue 微信授权登录解决方案
Apr 10 #Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
Apr 10 #Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
Apr 10 #Javascript
Angular CLI在Angular项目中如何使用scss详解
Apr 10 #Javascript
vue2.0+koa2+mongodb实现注册登录
Apr 10 #Javascript
bing Map 在vue项目中的使用详解
Apr 09 #Javascript
详解Vue打包优化之code spliting
Apr 09 #Javascript
You might like
php学习笔记之面向对象
2014/11/08 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
Python中的rfind()方法使用详解
2015/05/19 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
python的pip安装以及使用教程
2018/09/18 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
Unix/Linux开发面试题
2016/08/16 面试题
大学生职业生涯规划书模板
2014/01/18 职场文书
开业典礼主持词
2014/03/21 职场文书
大二学生自我检讨书
2014/10/23 职场文书
领导干部考核评语
2015/01/04 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers