/**
* 倒计时,主要用于发送短信验证码倒计时
* 利用到期时间做倒计时,解决倒计时在页面关闭后就被不会更新的痛点
*/
import { onMounted, ref } from "vue";
export function useCountDown() {
const timeLeft = ref<number>(0);
onMounted(() => {
// 计算当前时间到可以重新获取时间中间相差多少秒
if (getRetrieveTime()) {
const diff = getRetrieveTime() - new Date().getTime();
if (diff <= 0) {
// 倒计时结束了,可以获取验证码
timeLeft.value = 0;
} else {
// 倒计时没有结束,继续倒计时
timeLeft.value = Math.ceil(diff / 1000);
start();
}
}
});
/**
* 存储可以重新获取的时间
*/
const setRetrieveTime = (count: number) => {
localStorage.setItem(
"retrieveTime",
new Date(new Date().getTime() + count * 1000).getTime() + ""
);
};
/**
* 获取可以重新获取的时间
*/
const getRetrieveTime = () => {
return Number(localStorage.getItem("retrieveTime") || "0");
};
/**
* 启动循环
*/
const start = () => {
setTimeout(() => {
if (timeLeft.value > 0) {
timeLeft.value--;
start();
}
}, 1000);
};
/**
* 点击开启倒计时
* @param count 倒计时的时间,单位秒(s)
*/
const startCountDown = (count: number) => {
timeLeft.value = count;
setRetrieveTime(count);
start();
};
return {
timeLeft,
startCountDown,
};
}
Vue3 hook实现页面刷新继续倒计时
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 不说废话,看这个文档的大部分都是程序员,所以直接上代码了。 首先写了一个 CookieUtils.tsx 工具类 ...