JavaScript倒计时实现方案
基础时长倒计时实现
data() {
return {
timer: null,
minutes: 0,
seconds: 0,
duration: null,
}
},
created() {
this.initializeTimer(125); // 设置倒计时总秒数
},
methods: {
initializeTimer(totalSeconds){
this.minutes = Math.floor(totalSeconds / 60);
this.minutes = this.minutes < 10 ? `0${this.minutes}` : this.minutes;
console.log('当前分钟数--',this.minutes);
this.seconds = Math.floor(totalSeconds % 60);
this.timer = setInterval(this.countdownTick,1000);
},
countdownTick(){
this.seconds--;
this.seconds < 10 && (this.seconds = '0' + this.seconds);
// this.seconds = this.seconds < 10 ? `0${this.seconds}` : this.seconds;
if(this.seconds.length >= 3){
this.seconds = 59;
this.minutes = `0${(Number(this.minutes)-1)}`;
}
if(this.minutes.length >= 3){
this.minutes='00';
this.seconds='00';
clearInterval(this.timer);
}
this.duration = `${this.minutes}分钟${this.seconds}秒`;
console.log(this.minutes+"分钟"+this.seconds+"秒");
},
}
基于时间戳的倒计时方案
data() {
return {<br></br>
timer: null,``` currentTime: null, } },
created() {
this.timer = setInterval(this.updateCountdown,1000);```
},
methods: {
updateCountdown() {
// 获取当前时间
let now = new Date().getTime();
// 设置截止时间
let targetDate = new Date("2021/3/15 00:00:00");
let deadline = targetDate.getTime();
// 计算时间差
let timeDiff = deadline - now;
// 定义变量存储倒计时数值
let days, hours, mins, secs;
if (timeDiff >= 0) {
days = Math.floor(timeDiff/1000/60/60/24);
hours = Math.floor(timeDiff/1000/60/60%24);
mins = Math.floor(timeDiff/1000/60%60);
secs = Math.floor(timeDiff/1000%60);
}else {<br></br> clearInterval(this.timer); // 时间过期时清除定时器<br></br> }
// 更新显示内容
this.currentTime = `${mins}分${secs}秒`;<br></br>
if(mins == 0 && secs == 0) { clearInterval(this.timer); // 时间结束时清除计时器 this.$router.push('/register/invalid'); }``` }, }
简化版60秒倒计时实现
data() {
return {
timerCount: 60,
countdownTimer: null,
}
},
startCountdown (){
this.countdownTimer = setTimeout(() => {
this.timerCount--;
if (this.timerCount < 1) {
this.timerCount = 60;
this.isAvailable = false;
clearTimeout(this.countdownTimer);
} else {
this.startCountdown();
}
}, 1000);
},和
基于时间区间的倒计时处理
data(){ return { timer: null, displayTime: '30 : 00', remainingSeconds: 1 * 60, }},```
<br></br> startCountdown() {
// 获取时间戳
let startTimestamp = this.currentTimestamp; // 页面存储的开始时间
let endTimestamp = this.expirationTimestamp; // 页面存储的结束时间<br></br> if (startTimestamp < endTimestamp) {
let duration = (endTimestamp - startTimestamp)/1000;
this.remainingSeconds = duration;
this.countdown();
} else {
// 处理时间过期逻辑
}
},
countdown(){
this.timer = setInterval(() => {
this.remainingSeconds--;
this.displayTime = this.formatDuration(this.remainingSeconds);
if(this.remainingSeconds < 1) {
clearInterval(this.timer);
// 处理倒计时结束逻辑
}
}, 1000);
},
formatDuration(seconds) {
// 转换为分秒格式
let hours = parseInt(seconds / 60 / 60 % 24)
hours = hours < 10 ? '0' + hours : hours
let minutes = parseInt(seconds / 60 % 60)
minutes = minutes < 10 ? '0' + minutes : minutes
let secs = parseInt(seconds % 60)
secs = secs < 10 ? '0' + secs : secs
// 返回格式化结果
return `${minutes} : ${secs}`;
},
参考资料:https://www.cnblogs.com/heizai002/p/6862418.html