Widget:Countdown:修订间差异
来自OGAS数据中枢
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
<includeonly> | <includeonly> | ||
<span class="custom-countdown" | |||
<span class="countdown | data-target="<!--{$time|default:$1|escape:'quotes'}-->" | ||
data-before="<!--{$before|default:'$1前'}-->" | |||
data-after="<!--{$after|default:'还剩$1'}-->">...</span> | |||
<script> | <script> | ||
(function() { | (function() { | ||
let t = null; | let t = null; | ||
function u() { | function u() { | ||
const | const now = new Date(); | ||
document.querySelectorAll('.countdown | document.querySelectorAll('.custom-countdown').forEach(el => { | ||
const | const targetStr = el.getAttribute('data-target'); | ||
const beforeTpl = el.getAttribute('data-before'); | |||
const afterTpl = el.getAttribute('data-after'); | |||
// 处理仅年份的情况,补全为 YYYY-01-01 | |||
const finalTargetStr = /^\d{4}$/.test(targetStr) ? targetStr + "-01-01T00:00:00" : targetStr; | |||
const target = new Date(finalTargetStr); | |||
if (isNaN(target)) { | |||
el.innerHTML = '<span style="color:red">时间格式错误</span>'; | |||
if ( | |||
el.innerHTML = " | |||
return; | return; | ||
} | } | ||
const | const diff = target - now; | ||
const | const absDiff = Math.abs(diff); | ||
const | |||
// 计算时间差值字符串 | |||
const days = Math.floor(absDiff / 864e5); | |||
const hours = Math.floor((absDiff % 864e5) / 36e5); | |||
const mins = Math.floor((absDiff % 36e5) / 6e4); | |||
const secs = Math.floor((absDiff % 6e4) / 1000); | |||
let diffStr = ""; | |||
if (days > 0) diffStr += days + "天"; | |||
if (hours > 0 || days > 0) diffStr += hours + "小时"; | |||
if (mins > 0 || hours > 0 || days > 0) diffStr += mins + "分"; | |||
diffStr += secs + "秒"; | |||
// 根据时间正负应用模板 | |||
if (diff > 0) { | |||
el.innerHTML = afterTpl.replace('$1', diffStr); | |||
} else { | |||
el.innerHTML = beforeTpl.replace('$1', diffStr); | |||
} | |||
}); | }); | ||
} | } | ||
function start() { | function start() { if(!t){ u(); t=setInterval(u, 1000); } } | ||
function stop() { clearInterval(t); t=null; } | |||
document.addEventListener('visibilitychange', () => { document.hidden ? stop() : start(); }); | |||
function stop() { | |||
document.addEventListener('visibilitychange', () => { | |||
start(); | start(); | ||
})(); | })(); | ||
</script> | </script> | ||
</includeonly> | </includeonly><noinclude> | ||
这是一个倒计时微件,仅供{{tl|Countdown}}使用。 | |||
</noinclude> | |||
2026年5月3日 (日) 15:26的版本
这是一个倒计时微件,仅供{{Countdown}}使用。