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 相关文章推荐
js传值 判断
Oct 26 Javascript
javascript 动态参数判空操作
Dec 22 Javascript
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
Jan 30 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
Mar 01 Javascript
JavaScript中的正则表达式简明总结
Apr 04 Javascript
javascript的propertyIsEnumerable()方法使用介绍
Apr 09 Javascript
AngularJS中的Directive实现延迟加载
Jan 25 Javascript
jQuery DateTimePicker 日期和时间插件示例
Jan 22 Javascript
javascript实现多张图片左右无缝滚动效果
Mar 22 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
Jul 31 Javascript
vue的常用组件操作方法应用分析
Apr 13 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的autoload自动加载机制使用说明
2010/12/28 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
JS实现评价的星星功能
2017/08/20 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
利用python发送和接收邮件
2016/09/27 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
社团活动总结格式
2014/08/29 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技