Widget:Countdown:修订间差异
来自OGAS数据中枢
更多操作
无编辑摘要 |
无编辑摘要 |
||
| (未显示同一用户的4个中间版本) | |||
| 第1行: | 第1行: | ||
<includeonly> | <includeonly> | ||
<!--{assign var="targetTime" value=$time|default:$t}--> | |||
<span class="countdown- | <span class="custom-countdown" | ||
data-target="<!--{$targetTime|escape:'quotes'}-->" | |||
data-before="<!--{$before|default:'$1前'|escape:'quotes'}-->" | |||
data-after="<!--{$after|default:'还剩$1'|escape:'quotes'}-->">...</span> | |||
<script> | <script> | ||
(function() { | (function() { | ||
let | let timer = null; | ||
function update() { | |||
const now = new Date(); | |||
document.querySelectorAll('.custom-countdown').forEach(el => { | |||
let targetStr = el.getAttribute('data-target'); | |||
const beforeTpl = el.getAttribute('data-before'); | |||
const afterTpl = el.getAttribute('data-after'); | |||
if (!targetStr) return; | |||
if (/^\d{4}$/.test(targetStr)) { | |||
targetStr += "-01-01T00:00:00"; | |||
} | |||
if (/[+-]\d{2}$/.test(targetStr)) { | |||
new Date( | targetStr += ":00"; | ||
} | |||
if (/T\d{2}([+-]|Z|$)/.test(targetStr)) { | |||
targetStr = targetStr.replace(/(T\d{2})/, "$1:00:00"); | |||
} | |||
if (targetStr === 'today-end') { | |||
targetStr = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59).toISOString(); | |||
} | |||
if ( | const target = new Date(targetStr); | ||
el.innerHTML = " | if (isNaN(target)) { | ||
el.innerHTML = '<span style="color:red">时间格式错误 (' + targetStr + ')</span>'; | |||
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 + "秒"; | |||
el.innerHTML = | if (diff > 0) { | ||
el.innerHTML = afterTpl.replace('$1', diffStr); | |||
} else { | |||
el.innerHTML = beforeTpl.replace('$1', diffStr); | |||
} | |||
}); | }); | ||
} | } | ||
function start() { | function start() { if(!timer){ update(); timer=setInterval(update, 1000); } } | ||
function stop() { clearInterval(timer); timer=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:32的最新版本
这是一个倒计时微件,仅供{{Countdown}}使用。