/**
* 倒计时,主要用于发送短信验证码倒计时
* 利用到期时间做倒计时,解决倒计时在页面关闭后就被不会更新的痛点
*/
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实现页面刷新继续倒计时
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 不说废话,看这个文档的大部分都是程序员,所以直接上代码了。 首先写了一个 CookieUtils.tsx 工具类 ...