2026-10-22 15:41:08 点击:
以下是一个功能完整、样式美观的倒计时工具网页,你可以直接复制代码保存为HTML文件,双击即可在浏览器中运行使用。
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>自定义倒计时工具</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
font-family: 'Microsoft Yahei', sans-serif;
color: #fff;
padding: 20px;
}
background: rgba(255, 255, 255, 0.15);
backdrop-filter: blur(10px);
border-radius: 24px;
padding: 40px 30px;
width: 100%;
max-width: 700px;
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
text-align: center;
}
h1 {
font-size: 2.2rem;
margin-bottom: 30px;
font-weight: 600;
}
.input-area {
margin-bottom: 35px;
display: flex;
flex-wrap: wrap;
gap: 15px;
justify-content: center;
align-items: center;
}
.input-area input {
padding: 12px 18px;
border: none;
border-radius: 12px;
font-size: 1rem;
background: rgba(255, 255, 255, 0.9);
color: #333;
outline: none;
}
.input-area button {
padding: 12px 25px;
border: none;
border-radius: 12px;
background: #ff6b6b;
color: #fff;
font-size: 1rem;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
}
.input-area button:hover {
background: #ee5a5a;
transform: translateY(-2px);
}
.countdown {
display: flex;
justify-content: center;
gap: 20px;
flex-wrap: wrap;
}
.time-unit {
display: flex;
flex-direction: column;
align-items: center;
background: rgba(255, 255, 255, 0.2);
border-radius: 16px;
padding: 20px 15px;
min-width: 100px;
backdrop-filter: blur(5px);
}
.time-value {
font-size: 3rem;
font-weight: bold;
color: #fff;
margin-bottom: 8px;
}
.time-label {
font-size: 1rem;
text-transform: uppercase;
letter-spacing: 1px;
opacity: 0.9;
}
.expired-message {
display: none;
font-size: 2rem;
font-weight: bold;
color: #ffd700;
animation: pulse 1.5s infinite;
margin-top: 20px;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
@media (max-width: 500px) {
.time-unit {
min-width: 70px;
padding: 15px 10px;
}
.time-value {
font-size: 2rem;
}
h1 {
font-size: 1.6rem;
}
}
</style>
</head>
<body>
<div class="container">
<h1>自定义倒计时工具</h1>
<div class="input-area">
<input type="datetime-local" id="targetTime">
<button id="startBtn">开始倒计时</button>
</div>
<div class="countdown">
<div class="time-unit">
<span class="time-value" id="days">00</span>
<span class="time-label">天</span>
</div>
<div class="time-unit">
<span class="time-value" id="hours">00</span>
<span class="time-label">时</span>
</div>
<div class="time-unit">
<span class="time-value" id="minutes">00</span>
<span class="time-label">分</span>
</div>
<div class="time-unit">
<span class="time-value" id="seconds">00</span>
<span class="time-label">秒</span>
</div>
</div>
<div class="expired-message" id="expiredMsg">🎉 倒计时结束!</div>
</div>
<script>
let timer = null;
const daysEl = document.getElementById('days');
const hoursEl = document.getElementById('hours');
const minutesEl = document.getElementById('minutes');
const secondsEl = document.getElementById('seconds');
const expiredMsg = document.getElementById('expiredMsg');
const startBtn = document.getElementById('startBtn');
const targetTimeInput = document.getElementById('targetTime');
// 初始化默认目标时间(7天后的当前时刻)
const defaultTime = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000);
targetTimeInput.value = defaultTime.toISOString().slice(0, 16);
function updateCountdown(targetTimestamp) {
const now = Date.now();
const diff = targetTimestamp - now;
if (diff <= 0) {
clearInterval(timer);
daysEl.textContent = '00';
hoursEl.textContent = '00';
minutesEl.textContent = '00';
secondsEl.textContent = '00';
expiredMsg.style.display = 'block';
return;
}
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
daysEl.textContent = String(days).padStart(2, '0');
hoursEl.textContent = String(hours).padStart(2, '0');
minutesEl.textContent = String(minutes).padStart(2, '0');
secondsEl.textContent = String(seconds).padStart(2, '0');
}
startBtn.addEventListener('click', () => {
if (!targetTimeInput.value) {
alert('请选择目标时间');
return;
}
// 清除之前的定时器
if (timer) clearInterval(timer);
expiredMsg.style.display = 'none';
const targetTimestamp = new Date(targetTimeInput.value).getTime();
updateCountdown(targetTimestamp);
timer = setInterval(() => updateCountdown(targetTimestamp), 1000);
});
// 页面可见性变化时刷新倒计时,避免后台节流导致的误差
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible' && timer) {
const targetTimestamp = new Date(targetTimeInput.value).getTime();
updateCountdown(targetTimestamp);
}
});
</script>
</body>
</html>
核心功能说明
自定义目标时间:支持通过时间选择器自由设置倒计时结束时刻,默认预设7天后的时间
精准时间计算:基于毫秒级时间戳实时计算,自动补零显示两位数字,视觉更统
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>自定义倒计时工具</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
font-family: 'Microsoft Yahei', sans-serif;
color: #fff;
padding: 20px;
}
background: rgba(255, 255, 255, 0.15);
backdrop-filter: blur(10px);
border-radius: 24px;
padding: 40px 30px;
width: 100%;
max-width: 700px;
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
text-align: center;
}
h1 {
font-size: 2.2rem;
margin-bottom: 30px;
font-weight: 600;
}
.input-area {
margin-bottom: 35px;
display: flex;
flex-wrap: wrap;
gap: 15px;
justify-content: center;
align-items: center;
}
.input-area input {
padding: 12px 18px;
border: none;
border-radius: 12px;
font-size: 1rem;
background: rgba(255, 255, 255, 0.9);
color: #333;
outline: none;
}
.input-area button {
padding: 12px 25px;
border: none;
border-radius: 12px;
background: #ff6b6b;
color: #fff;
font-size: 1rem;
font-weight: 500;
cursor: pointer;
transition: all 0.3s ease;
}
.input-area button:hover {
background: #ee5a5a;
transform: translateY(-2px);
}
.countdown {
display: flex;
justify-content: center;
gap: 20px;
flex-wrap: wrap;
}
.time-unit {
display: flex;
flex-direction: column;
align-items: center;
background: rgba(255, 255, 255, 0.2);
border-radius: 16px;
padding: 20px 15px;
min-width: 100px;
backdrop-filter: blur(5px);
}
.time-value {
font-size: 3rem;
font-weight: bold;
color: #fff;
margin-bottom: 8px;
}
.time-label {
font-size: 1rem;
text-transform: uppercase;
letter-spacing: 1px;
opacity: 0.9;
}
.expired-message {
display: none;
font-size: 2rem;
font-weight: bold;
color: #ffd700;
animation: pulse 1.5s infinite;
margin-top: 20px;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
@media (max-width: 500px) {
.time-unit {
min-width: 70px;
padding: 15px 10px;
}
.time-value {
font-size: 2rem;
}
h1 {
font-size: 1.6rem;
}
}
</style>
</head>
<body>
<div class="container">
<h1>自定义倒计时工具</h1>
<div class="input-area">
<input type="datetime-local" id="targetTime">
<button id="startBtn">开始倒计时</button>
</div>
<div class="countdown">
<div class="time-unit">
<span class="time-value" id="days">00</span>
<span class="time-label">天</span>
</div>
<div class="time-unit">
<span class="time-value" id="hours">00</span>
<span class="time-label">时</span>
</div>
<div class="time-unit">
<span class="time-value" id="minutes">00</span>
<span class="time-label">分</span>
</div>
<div class="time-unit">
<span class="time-value" id="seconds">00</span>
<span class="time-label">秒</span>
</div>
</div>
<div class="expired-message" id="expiredMsg">🎉 倒计时结束!</div>
</div>
<script>
let timer = null;
const daysEl = document.getElementById('days');
const hoursEl = document.getElementById('hours');
const minutesEl = document.getElementById('minutes');
const secondsEl = document.getElementById('seconds');
const expiredMsg = document.getElementById('expiredMsg');
const startBtn = document.getElementById('startBtn');
const targetTimeInput = document.getElementById('targetTime');
// 初始化默认目标时间(7天后的当前时刻)
const defaultTime = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000);
targetTimeInput.value = defaultTime.toISOString().slice(0, 16);
function updateCountdown(targetTimestamp) {
const now = Date.now();
const diff = targetTimestamp - now;
if (diff <= 0) {
clearInterval(timer);
daysEl.textContent = '00';
hoursEl.textContent = '00';
minutesEl.textContent = '00';
secondsEl.textContent = '00';
expiredMsg.style.display = 'block';
return;
}
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
daysEl.textContent = String(days).padStart(2, '0');
hoursEl.textContent = String(hours).padStart(2, '0');
minutesEl.textContent = String(minutes).padStart(2, '0');
secondsEl.textContent = String(seconds).padStart(2, '0');
}
startBtn.addEventListener('click', () => {
if (!targetTimeInput.value) {
alert('请选择目标时间');
return;
}
// 清除之前的定时器
if (timer) clearInterval(timer);
expiredMsg.style.display = 'none';
const targetTimestamp = new Date(targetTimeInput.value).getTime();
updateCountdown(targetTimestamp);
timer = setInterval(() => updateCountdown(targetTimestamp), 1000);
});
// 页面可见性变化时刷新倒计时,避免后台节流导致的误差
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible' && timer) {
const targetTimestamp = new Date(targetTimeInput.value).getTime();
updateCountdown(targetTimestamp);
}
});
</script>
</body>
</html>
核心功能说明
自定义目标时间:支持通过时间选择器自由设置倒计时结束时刻,默认预设7天后的时间
精准时间计算:基于毫秒级时间戳实时计算,自动补零显示两位数字,视觉更统
- 上一篇:没有啦
- 下一篇:帮我根据烟锁池塘柳对个上下联最新收费标准 [2026-10-22]
