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重写alert控件(适合学习js的新手朋友)
Aug 24 Javascript
AngularJS入门教程之Hello World!
Dec 06 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
Feb 05 Javascript
JavaScript与HTML的结合方法详解
Nov 23 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
Apr 18 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
Apr 29 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
Jul 01 Javascript
浅谈时钟的生成(js手写简洁代码)
Aug 20 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
Feb 22 Javascript
解决layui中的form表单与button的点击事件冲突问题
Aug 15 Javascript
vue中input的v-model清空操作
Sep 06 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
第三节--定义一个类
2006/11/16 PHP
php MySQL与分页效率
2008/06/04 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
Three.js基础部分学习
2017/01/08 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
openstack中的rpc远程调用的方法
2021/07/09 Python
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL
Java版 简易五子棋小游戏
2022/05/04 Java/Android
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python