Rxjs之interval、take制作倒计时效果

获取验证码按钮,一个耳熟能详的常见功能…

在这里插入图片描述

之前一直是使用JS来实现的,那么最近接触了Rxjs,就跟着文档来实现一个简单的倒计时功能吧
话不多说,直接上代码了…

首先准备工作做好。
引入所需的rxjs的方法、定义变量

import { interval } from 'rxjs';
import { take } from 'rxjs/operators';
buttonText = '获取验证码';
isDisabled = false;  // 按钮是否灰显
seconds = 60;  // 倒计时开始时间

然后嘞,是时候让RXJS展示真正的技术了!

countDown() {
    interval(1000)
      .pipe(take(this.seconds + 1))   // 注意哦,这里是做 +1 的操作
      .subscribe({
        next: (value: number) => {
          this.isDisabled = true;
          this.buttonText = `重新获取(${this.seconds - value}s)`;
        },
        error: null,
        complete: () => {
          this.buttonText = '重新获取';
          this.isDisabled = false;
        }
    });
}

然后我们接下来去调用就可以啦,顺便附带上html的代码片段

<button
  [ngClass]="className"
  [disabled]="isDisabled"
  (click)="btnClick()"
  class="countDown"
>
  {{ buttonText }}
</button>

诺,我这是在angular中使用的,所以标签button里边的属性和属性值就是上述的写法。
当然如果你是原生或者Vue或者React写法,自行转化哦,万变不离其中…

顺便给出好奇的小宝贝们,对于上述button标签中angular的用法之ngClass,的代码片段,如果你没使用过angular,那么也做了解喽

get className(): object {
    return {
      'disabled': this.isDisabled,  // 类名 disabled 的有无被变量 isDisabled 的状态决定
    };
}

至此~~Rxjs制作倒计时效果就实现了,你,学会了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值