【VUE倒计时功能】例:发送验证码

倒计时组件 template

1 <template>
2   <el-button class="captcha-img captcha-tel" :disabled="canClick">
3     {{this.getAgain ? this.count + 's后获取': '发送验证码'}}
4   </el-button>
5 </template>

由父组件传来 初始倒计时数据countNum

    props: {
      countNum: {
        type: Number
      }
    },
    data () {
      return {
        // 默认倒计时时间
        getAgain: false,
        canClick: false,
        timer: null,
        count: 60
      }
    },

倒计时方法

 1     methods: {
 2       // 倒计时功能
 3       countDown (countTime) {
 4         let vm = this;
 5         vm.count = vm.countNum;
 6         if (!vm.timer) {
 7           vm.timer = setInterval(() => {
 8             if (vm.count > 1 && vm.count <= countTime) {
 9               vm.getAgain = true;
10               vm.canClick = true;
11               vm.count--;
12             } else {
13               clearInterval(vm.timer);
14               vm.timer = null;
15               vm.getAgain = false;
16               vm.canClick = false;
17               vm.count = vm.countNum;
          // 倒计时结束,可以向父组件emit重置图片验证码方法
18 vm.$emit('countCallBack') 19 }
          // 该方法用于实时向外传递倒计时的状态,以控制父组件中是否可以点击触发发送验证码方法
20 vm.$emit('clickState', vm.getAgain) 21 }, 1000) 22 } 23 } 24 }

父组件引用

1           <div @click="getTelCode" class="captchaBox">
2             <countDown
3               ref="countDown"
4               @clickState="clickState"
5               @countCallBack="createImgCode('modifyPwd')"
6               :countNum="count"
7             ></countDown>
8           </div>

1.点击的时候getTelCode事件,发送验证码时

 1       // 获取手机验证码
 2       getTelCode () {
 3         let vm = this;
 4         // 如果获取过验证码,倒计时过程中,不允许点击发请求
 5         if (vm.countState) {
 6           return false;
 7         }
 8         if (!vm.countState) {
 9           telphoneAccount({
10             functionId: 'modifyPwd',
11             checkCode: vm.pwdForm.imgCaptcha
12           }).then(res => {
13             if (res.data.code === 'SUC_0001') {
14               // 发送成功 触发子组件内的countDown倒计时事件
15               vm.phoneSendScs = true;
16               vm.$refs.countDown.countDown(60);
17             }  else {
18               // 发送失败,执行规定的事件
19             }
20           })
21         }        
posted @ 2021-01-19 10:04  行屰  阅读(240)  评论(0编辑  收藏  举报