first initial commit

This commit is contained in:
2026-02-07 22:27:31 +08:00
commit 07786f8eb0
18 changed files with 6035 additions and 0 deletions

57
assets/js/timer.js Normal file
View 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);
}