first initial commit
This commit is contained in:
57
assets/js/timer.js
Normal file
57
assets/js/timer.js
Normal file
@@ -0,0 +1,57 @@
|
||||
function initClassTimers() {
|
||||
const timers = document.querySelectorAll('.js-event-timer');
|
||||
|
||||
timers.forEach(timer => {
|
||||
const targetTimeStr = timer.getAttribute('data-target');
|
||||
const labelEl = timer.querySelector('.js-timer-label');
|
||||
const daysEl = timer.querySelector('.js-days');
|
||||
const hoursEl = timer.querySelector('.js-hours');
|
||||
const minutesEl = timer.querySelector('.js-minutes');
|
||||
const secondsEl = timer.querySelector('.js-seconds');
|
||||
|
||||
// 清除可能存在的旧定时器(防止PJAX导致的叠加)
|
||||
if (timer.timerId) clearInterval(timer.timerId);
|
||||
|
||||
function updateTimer() {
|
||||
const targetDate = new Date(targetTimeStr).getTime();
|
||||
// 简单格式校验,防止 Excerpt 填错导致报错
|
||||
if (isNaN(targetDate)) {
|
||||
if (labelEl) labelEl.innerText = "日期错误";
|
||||
return;
|
||||
}
|
||||
|
||||
const now = new Date().getTime();
|
||||
const difference = targetDate - now;
|
||||
const isPast = difference < 0;
|
||||
const absDiff = Math.abs(difference);
|
||||
|
||||
// 更新状态标签
|
||||
if (labelEl) {
|
||||
labelEl.innerText = isPast ? "已经过去" : "倒计时中";
|
||||
}
|
||||
|
||||
// 计算时间
|
||||
const d = Math.floor(absDiff / (1000 * 60 * 60 * 24));
|
||||
const h = Math.floor((absDiff / (1000 * 60 * 60)) % 24);
|
||||
const m = Math.floor((absDiff / 1000 / 60) % 60);
|
||||
const s = Math.floor((absDiff / 1000) % 60);
|
||||
|
||||
// 更新数字显示 (加了动画平滑过渡感)
|
||||
if (daysEl) daysEl.innerText = d.toString().padStart(2, '0');
|
||||
if (hoursEl) hoursEl.innerText = h.toString().padStart(2, '0');
|
||||
if (minutesEl) minutesEl.innerText = m.toString().padStart(2, '0');
|
||||
if (secondsEl) secondsEl.innerText = s.toString().padStart(2, '0');
|
||||
}
|
||||
|
||||
updateTimer();
|
||||
timer.timerId = setInterval(updateTimer, 1000);
|
||||
});
|
||||
}
|
||||
|
||||
// 首次加载执行
|
||||
document.addEventListener('DOMContentLoaded', initClassTimers);
|
||||
|
||||
// PJAX 兼容执行 (适配 Ghost 常用的主题加载方式)
|
||||
if (typeof pjax !== 'undefined' || document.querySelector('[data-pjax]')) {
|
||||
document.addEventListener('pjax:complete', initClassTimers);
|
||||
}
|
||||
Reference in New Issue
Block a user