您的位置:首页 > 汽车 > 时评 > 拼多多申请注册店铺_美工培训班哪家好_广州网站维护_培训机构哪家最好

拼多多申请注册店铺_美工培训班哪家好_广州网站维护_培训机构哪家最好

2024/11/18 4:17:54 来源:https://blog.csdn.net/qq_57340195/article/details/143257555  浏览:    关键词:拼多多申请注册店铺_美工培训班哪家好_广州网站维护_培训机构哪家最好
拼多多申请注册店铺_美工培训班哪家好_广州网站维护_培训机构哪家最好

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

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

在这里插入图片描述

1、 实现思路和具体实现

实现思路:

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

在这里插入图片描述

具体实现:

注意:为了简洁明了,代码里只有一个输入框、按钮和最重要的逻辑,没有样式。用了 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>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com