【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 }