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 相关文章推荐
IE autocomplete internet explorer's autocomplete
Jun 30 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
Feb 07 Javascript
JQuery中$(document)是什么意思有什么作用
Jul 21 Javascript
javascript实现日期时间动态显示示例代码
Sep 08 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
Dec 10 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
May 27 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
May 28 Javascript
同步异步动态引入js文件的几种方法总结
Sep 23 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 jQuery
vue中axios处理http发送请求的示例(Post和get)
Oct 13 Javascript
vue切换菜单取消未完成接口请求的案例
Nov 13 Javascript
js实现圆形菜单选择器
Dec 03 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中进行身份认证
2006/10/09 PHP
php预定义常量
2006/12/25 PHP
php生成随机数或者字符串的代码
2008/09/05 PHP
php面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
Python操作Excel之xlsx文件
2017/03/24 Python
Android分包MultiDex策略详解
2017/10/30 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
浅谈Python type的使用
2019/11/19 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
管理站站长岗位职责
2013/11/27 职场文书
经典团队口号大全
2014/06/21 职场文书
个人收入证明范本
2015/06/12 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang