Vue3实现获取验证码按钮倒计时效果

 更新时间:2024年10月28日 08:54:24   作者:永恒之月℡  
这篇文章主要介绍了Vue3实现获取验证码按钮倒计时效果,用户点击获取验证码按钮,发送请求给后端,按钮失效,并且开始倒计时60秒;在此期间,用户无法再次点击按钮,即使用户刷新页面,倒计时依然存在,直到倒计时完毕,按钮恢复,感兴趣的小伙伴跟着小编一起来看看吧

Vue3实现获取验证码按钮倒计时效果

效果描述:用户点击获取验证码按钮,发送请求给后端,按钮失效,并且开始倒计时60秒;在此期间,用户无法再次点击按钮,即使用户刷新页面,倒计时依然存在,直到倒计时完毕,按钮恢复。效果图如下:

实现思路和具体实现

实现思路:

  • 通过响应式变量来,设置倒计时默认数据(按钮名称,秒数,按钮状态)
  • 倒计时函数,来改变响应式变量里的数据,使用周期函数(window.setInterval),来循环执行。
  • 使用watch函数来监控响应式变量里的数据,是否改变,改变就将数据保存到LocalStorage中。
  • 使用生命周期函数onMounted来获取LocalStorage里面的数据,防止用户刷新。
  • 最后,将数据和函数,绑定到按钮上。

具体实现:

注意:为了简洁明了,代码里只有一个输入框、按钮和最重要的逻辑,没有样式。用了 element-plus框架,可自行修改。

<template>
	<div>
  <el-input v-model="input" style="width: 125px;margin-right: 10px;" placeholder="请输入验证码" />
   <el-button type="primary" :disabled="countdownInfo.isDisabled" @click="countdown() " style="width:105px;">{{ countdownInfo.buttonName }}</el-button>
	</div>
</template>


<script setup>
    import { ElMessage } from 'element-plus';
	import { ref,watch,onMounted } from 'vue';

      //倒计时信息
    const countdownInfo = ref({
    second: 60,    //倒计时秒
    buttonName: "获取验证码", //按钮名称
    isDisabled: false        //按钮是否有效,默认有效
   })  
    
    //生命周期函数
    onMounted(() => {
     //获取localStorage里保存的,倒计时字符串信息,并解析为JSON对象
    var localCountdownInfo = JSON.parse(localStorage.getItem("countdownInfo"));
    //判断获取的信息是否为空,为空,说明里面没有保存数据,就不赋值到countdownInfo中
    if (localCountdownInfo) {
        countdownInfo.value =localCountdownInfo;
        //不为空时,判断倒计时秒数,是否为60,不是就直接调用倒计时函数(说明没有倒计时完),执行倒计时。
        if (countdownInfo.value.second !== 60) {
            countdown()  //调用倒计时函数
        }
    }
})


// 定义倒计时函数
const countdown=()=> {
    countdownInfo.value.isDisabled = true;   //按钮无效
            //开始倒计时
            let interval = window.setInterval(function () {
                countdownInfo.value.buttonName =  countdownInfo.value.second + "秒后重新获取"; //重新设置按钮名称
                countdownInfo.value.second = countdownInfo.value.second - 1;   //倒计时减
                //判断是否减到了0,为0就恢复默认信息,并停止倒计时
                if (countdownInfo.value.second <=0) {
                    countdownInfo.value.buttonName = "获取验证码";
                    countdownInfo.value.second = 60;
                    countdownInfo.value.isDisabled = false;
                    window.clearInterval(interval);
                }
            }, 1000);  //一秒执行一次

}

//监听对象,数据是否发生改变,改变就进行重新保存
watch(countdownInfo, (newValue) => {
    var JSONSTR = JSON.stringify(newValue);  //将JSON转为字符串
    localStorage.setItem("countdownInfo", JSONSTR)  //将其保存到localStorage中
}, {
    deep: true   //深度监听
})
</script>

到此这篇关于Vue3实现获取验证码按钮倒计时效果的文章就介绍到这了,更多相关Vue3验证码按钮倒计时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue forEach循环数组拿到自己想要的数据方法

    vue forEach循环数组拿到自己想要的数据方法

    今天小编就为大家分享一篇vue forEach循环数组拿到自己想要的数据方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue页面跳转后返回原页面初始位置方法

    vue页面跳转后返回原页面初始位置方法

    下面小编就为大家分享一篇vue页面跳转后返回原页面初始位置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Vue实现简单的留言板

    Vue实现简单的留言板

    这篇文章主要为大家详细介绍了Vue实现简单的留言板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • vue 数组添加数据方式

    vue 数组添加数据方式

    这篇文章主要介绍了vue 数组添加数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Vite vue3多页面入口打包以及部署踩坑实战

    Vite vue3多页面入口打包以及部署踩坑实战

    因为我们公司的项目是多页面应用,不同于传统单页面应用,一个包就可以了,下面这篇文章主要给大家介绍了关于Vite vue3多页面入口打包以及部署踩坑的相关资料,需要的朋友可以参考下
    2022-05-05
  • 使用Elemen加上lang=“ts“后编译报错

    使用Elemen加上lang=“ts“后编译报错

    本文主要介绍了使用Elemen加上lang=“ts“后编译报错,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • vue项目中使用eslint+prettier规范与检查代码的方法

    vue项目中使用eslint+prettier规范与检查代码的方法

    这篇文章主要介绍了vue项目中使用eslint+prettier规范与检查代码的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • vue.js实现开关(switch)组件实例代码

    vue.js实现开关(switch)组件实例代码

    这篇文章介绍了vue.js实现开关(switch)组件的实例代码,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • vue路由跳转了但界面不显示的问题及解决

    vue路由跳转了但界面不显示的问题及解决

    这篇文章主要介绍了vue路由跳转了但界面不显示的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue+elementUI下拉框回显问题及解决方式

    vue+elementUI下拉框回显问题及解决方式

    这篇文章主要介绍了vue+elementUI下拉框回显问题及解决方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论