博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向Vue新人:写一个简单的倒计时按钮
阅读量:6091 次
发布时间:2019-06-20

本文共 2209 字,大约阅读时间需要 7 分钟。

在项目开发里,我们经常会遇到发送验证码、点击了之后有60秒倒计时的按钮,很常见却也很简单,但是在写这个按钮的时候有个别地方还要注意下,今天写出来,如有问题欢迎指正!

完成的效果如下:

为了更快显示出效果,我把时间设成了5秒。按钮在点击之后会出现倒计时,同时按钮变为不可点击状态,样式也发生变化,鼠标悬浮上的样子也会发生变化。

接下来我们用代码来实现:

...data () {    return {      content: '发送验证码',   // 按钮里显示的内容      totalTime: 60           //记录具体倒计时时间    }},methods: {    countDown() {        let clock = window.setInterval(() => {            this.totalTime--            this.content = this.total + 's后重新发送'        },1000)    }}复制代码

在data里加了两条数据,一条用来记录时间,一条用来盛放倒计时按钮的具体内容。在countDown函数里我们用了setInterval定时器,每隔一秒totalTime减1,同时更改按钮里显示的内容。在window.setInterval里用了箭头函数,因为它会自动绑定外面的this,所以就不用先存下this了。

效果如下图:

但是这个按钮还有一些问题:

  • 点击了按钮之后过了1秒就直接从59秒开始倒计时了,中间的60不见了
  • 倒计时的时候还可以点击
  • 还没有清除倒计时

接下来需要继续完善countDown函数来解决这些问题。

countDown () {  this.content = this.totalTime + 's后重新发送'  //这里解决60秒不见了的问题  let clock = window.setInterval(() => {    this.totalTime--    this.content = this.totalTime + 's后重新发送'    if (this.totalTime < 0) {         //当倒计时小于0时清除定时器        window.clearInterval(clock)        this.content = '重新发送验证码'        this.totalTime = 60        }  },1000)},复制代码

上面的代码解决了60不见的问题,同时当totalTime小于0时清除同时器、重新设置按钮里的content、将totalTime重置为60以便下次使用。

倒计10秒的效果:

发现bug,多次点击之后,倒讲时速度变快,这是因为每次点击都会启动一个setInterval,这些setInterval都会减少totalTime。解决的方法也很简单:简单节流一下就好了,就是第一次点击按钮之后让countDonw这个函数的代码不可执行,等到倒计时结束之后才可以再次执行。

data () {    return {      content: '发送验证码',      totalTime: 10,      canClick: true  //添加canClick    }}...countDown () {  if (!this.canClick) return   //改动的是这两行代码  this.canClick = false  this.content = this.totalTime + 's后重新发送'  let clock = window.setInterval(() => {    this.totalTime--    this.content = this.totalTime + 's后重新发送'    if (this.totalTime < 0) {      window.clearInterval(clock)      this.content = '重新发送验证码'      this.totalTime = 10      this.canClick = true   //这里重新开启    }  },1000)}复制代码

在data里添加canClick,默认是true,如果canClick为true,countDown里的代码可以执行,如果是false就不行。每执行一次就将canClick设为false,而只在倒计时结束的时候再改为true。这样刚才的问题就没有了。

到这里其实就差不多了,不过还可以调整下样式:

效果:

这个倒计时按钮十分简单,但是我第一次写的时候还是写的很乱,而且那个时候还不知道函数节流的概念,也不清楚多次点击为啥倒计时会变快,现在理解了写在这里。如果还有什么不足,还希望大家多多批评指正!

这是我在掘金写的第六篇文章,感谢您的观看!

转载地址:http://avvwa.baihongyu.com/

你可能感兴趣的文章
Socket: 字节顺序.
查看>>
NFS笔记
查看>>
plsql developer、oracle client、 instantclient
查看>>
FACL
查看>>
基于Nodejs+Angular+Bootstrap+MySQL的Admin
查看>>
jquery里面的attr和prop方法的区别
查看>>
重构-改善既有代码的设计-代码的坏味道
查看>>
物理游戏的同步模型
查看>>
私立gitlab服务器
查看>>
使用Discuz!开源管理系统搭建论坛
查看>>
cas加入验证码以及强制密码到期修改流程
查看>>
设计原则之单一职能原则
查看>>
linux 常用vi命令
查看>>
2018-4-15Linux系统管理(17) 网络工具及相关配置工具
查看>>
信息化支撑中联重科向全球化转型
查看>>
生成树协议PVST+实现阻止线路环绕与备份线路实验
查看>>
Yii2语言国际化配置Twig翻译解决方案
查看>>
mysql状态查看 QPS/TPS/缓存命中率查看
查看>>
windows 7开机卡在更新界面
查看>>
Ubuntu开机出现grub rescue的模式下修复
查看>>