LLWiki正在建设中,欢迎加入我们!
“Widget:Countdown”的版本间差异
跳转到导航
跳转到搜索
小 |
小 |
||
第5行: | 第5行: | ||
"use strict"; |
"use strict"; |
||
window.addEventListener('load', function () { |
window.addEventListener('load', function () { |
||
var timeObj = {}; |
|||
const fromNow = function (ele) { |
const fromNow = function (ele) { |
||
let now = moment(), |
|||
then = moment(ele.dataset.target), |
then = moment(ele.dataset.target), |
||
before = ele.children[1], |
before = ele.children[1], |
||
after = ele.children[2], |
after = ele.children[2], |
||
isBefore = then.isBefore(now), |
isBefore = then.isBefore(now), |
||
monthsHave31Days = [0, 2, 4, 6, 7, 9, 11] |
monthsHave31Days = [0, 2, 4, 6, 7, 9, 11], // 月份从0开始 |
||
year = isBefore ? now.year() - then.year() : then.year() - now.year(), |
|||
month = isBefore ? now.month() - then.month() : then.month() - now.month(), |
month = isBefore ? now.month() - then.month() : then.month() - now.month(), |
||
day = isBefore ? now.date() - then.date() : then.date() - now.date(), |
day = isBefore ? now.date() - then.date() : then.date() - now.date(), |
||
hour = isBefore ? now.hour() - then.hour() : then.hour() - now.hour(), |
hour = isBefore ? now.hour() - then.hour() : then.hour() - now.hour(), |
||
minute = isBefore ? now.minute() - then.minute() : then.minute() - now.minute(), |
minute = isBefore ? now.minute() - then.minute() : then.minute() - now.minute(), |
||
second = isBefore ? now.second() - then.second() : then.second() - now.second() |
second = isBefore ? now.second() - then.second() : then.second() - now.second(), |
||
⚫ | |||
if (second < 0) { |
if (second < 0) { |
||
minute--; |
minute--; |
||
第49行: | 第49行: | ||
month += 12; |
month += 12; |
||
} |
} |
||
⚫ | |||
if (year > 0) { |
if (year > 0) { |
||
result += `<span class="countdown-num">${year}</` + 'span>年'; |
result += `<span class="countdown-num">${year}</` + 'span>年'; |
||
第80行: | 第79行: | ||
if(isBefore) { |
if(isBefore) { |
||
before.innerHTML = before.innerHTML.replace("$1", result.replace(/(\d) /g, "$1")); |
before.innerHTML = before.innerHTML.replace("$1", result.replace(/(\d) /g, "$1")); |
||
after. |
after.style.display = "none"; |
||
} |
} |
||
else { |
else { |
||
after.innerHTML = after.innerHTML.replace("$1", result.replace(/(\d) /g, "$1")); |
after.innerHTML = after.innerHTML.replace("$1", result.replace(/(\d) /g, "$1")); |
||
before. |
before.style.display = "none"; |
||
} |
} |
||
ele.children[0].remove(); |
|||
}; |
}; |
||
const run = () => { |
const run = () => { |
||
document.querySelectorAll(".countdownNode:not(.disabled)").forEach((ele) => { |
document.querySelectorAll(".countdownNode:not(.disabled)").forEach((ele) => { |
||
fromNow(ele); |
fromNow(ele); |
||
ele.style.visibility = "visible"; |
|||
}); |
}); |
||
}; |
}; |
||
第100行: | 第99行: | ||
return; |
return; |
||
} |
} |
||
timeObj[ele.id] = time; |
|||
}); |
}); |
||
run(); |
run(); |
2020年8月24日 (一) 04:57的版本
JavaScript脚本:
"use strict";
window.addEventListener('load', function () {
const fromNow = function (ele) {
let now = moment(),
then = moment(ele.dataset.target),
before = ele.children[1],
after = ele.children[2],
isBefore = then.isBefore(now),
monthsHave31Days = [0, 2, 4, 6, 7, 9, 11], // 月份从0开始
year = isBefore ? now.year() - then.year() : then.year() - now.year(),
month = isBefore ? now.month() - then.month() : then.month() - now.month(),
day = isBefore ? now.date() - then.date() : then.date() - now.date(),
hour = isBefore ? now.hour() - then.hour() : then.hour() - now.hour(),
minute = isBefore ? now.minute() - then.minute() : then.minute() - now.minute(),
second = isBefore ? now.second() - then.second() : then.second() - now.second(),
result = "";
if (second < 0) {
minute--;
second += 60;
}
if (minute < 0) {
hour--;
minute += 60;
}
if (hour < 0) {
day--;
hour += 24;
}
if (day < 0) {
month--;
if (monthsHave31Days.includes((isBefore ? then : now).month())) {
day += 31;
} else if ((isBefore ? then : now).month() === 1) {
if ((isBefore ? then : now).year() % 4 === 0) {
day += 29;
} else {
day += 28;
}
} else {
day += 30;
}
}
if (month < 0) {
year--;
month += 12;
}
if (year > 0) {
result += `<span class="countdown-num">${year}</` + 'span>年';
}
if (month > 0) {
result += `<span class="countdown-num">${month}</` + 'span>月';
} else if (result !== "") {
result += `<span class="countdown-num">${0}</` + 'span>月';
}
if (day > 0) {
result += `<span class="countdown-num">${day}</` + 'span>日';
} else if (result !== "") {
result += `<span class="countdown-num">${0}</` + 'span>日';
}
if (hour > 0) {
result += `<span class="countdown-num">${hour}</` + 'span>' + ele.children[0].innerHTML;
} else if (result !== "") {
result += `<span class="countdown-num">${0}</` + 'span>' + ele.children[0].innerHTML;
}
if (minute > 0) {
result += `<span class="countdown-num">${minute}</` + 'span>分';
} else if (result !== "") {
result += `<span class="countdown-num">${0}</` + 'span>分';
}
if (second > 0) {
result += `<span class="countdown-num">${second}</` + 'span>秒';
} else if (result !== "") {
result += `<span class="countdown-num">${0}</` + 'span>秒';
}
if(isBefore) {
before.innerHTML = before.innerHTML.replace("$1", result.replace(/(\d) /g, "$1"));
after.style.display = "none";
}
else {
after.innerHTML = after.innerHTML.replace("$1", result.replace(/(\d) /g, "$1"));
before.style.display = "none";
}
};
const run = () => {
document.querySelectorAll(".countdownNode:not(.disabled)").forEach((ele) => {
fromNow(ele);
ele.style.visibility = "visible";
});
};
document.querySelectorAll(".countdownNode").forEach((ele) => {
const time = moment(ele.dataset.target);
if (!time || !time.isValid()) {
ele.classList.add("error", "disabled")
ele.innerHTML = "(发生了致命错误!)";
return;
}
});
run();
window.setInterval(run, 1000);
});
//
CSS样式表:
*/
.countdown-num {
display:inline-block;
width:1.25em;
text-align:right;
}
/*