做为一名正在为高考奋斗的高三党,日复一日实在是太无聊啦!于是我突然灵光一闪,做了这个高考倒计时的小工具
Countdown!(๑•̀ㅂ•́)و✧
为什么会想到做这个?
高三的日子真的好忙碌呀,每天都在刷题、背书、考试中循环。有一天我突然想:要是有个能随时提醒我距离高考还有多久,又能给我加油打气的小工具就好啦!
于是我就在GitHub上翻呀翻,想找一个简单又好看的高考倒计时网页。逛了好久,终于发现了Gasolcloudteam/Countdown这个仓库~ 它的功能很基础,但我觉得可以给它加点“魔法”,让它变得更有趣、更能鼓励像我一样的考生!
说干就干,我决定fork这个项目,按照自己的想法改造它!
我的改造之旅~
时间计算
一开始我只是想先看看原项目是怎么工作的。打开代码研究了一番,发现它的倒计时计算有点小问题~ 作为一个要参加高考的人,时间可是容不得半点马虎的!
我仔细检查了日期计算的逻辑,重新写了一遍代码,确保它能精确地计算出距离高考的每一分每一秒~ 现在它终于可以准确告诉我还剩多少天可以努力啦!
“鼓励魔法”!
倒计时只是基础功能,我希望这个工具还能在我累了的时候给我加油打气~
于是我想:要是在高考当天,它能自动跳出一句“考试顺利”的祝福该多好!我立刻动手实现了这个功能~ 现在,无论是高考还是其他重要考试,到了那一天它都会给你送上最温暖的祝福哦 (✧ω✧)
不止高考
高三可不止高考这一个考试呢~ 我们还有调研考、零模、一模、二模… 每个考试都很重要!
我就想:要是能在同一个页面查看所有重要考试的倒计时就好啦!于是我给它加了个超级实用的功能——考试类型切换!
我首先定义了所有重要考试的配置:
1 2 3 4 5 6 7 8
| const exams = [ { name: "调研考", year: 2025, month: 7, day: 21 }, { name: "零模", year: 2025, month: 11, day: 23 }, { name: "一模", year: 2026, month: 2, day: 19 }, { name: "二模", year: 2026, month: 3, day: 21 }, { name: "高考", year: 2026, month: 5, day: 7 } ];
|
然后实现了一个智能选择最近考试的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| function selectNearestExam() { const today = new Date(); let nearestExamIndex = 0; let minDaysDifference = Infinity;
for (let i = 0; i < exams.length; i++) { const examDate = new Date(exams[i].year, exams[i].month, exams[i].day); const timeDiff = examDate - today; const daysDifference = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));
if (daysDifference >= 0 && daysDifference < minDaysDifference) { minDaysDifference = daysDifference; nearestExamIndex = i; } }
return nearestExamIndex; }
|
最后添加了点击切换的交互逻辑:
1 2 3 4 5 6 7 8 9 10 11 12 13
| document.getElementById("examType").addEventListener("click", () => { if (displayMode === 'gaokao') { displayMode = 'nearest'; currentExamIndex = selectNearestExam(); } else { displayMode = 'gaokao'; currentExamIndex = exams.findIndex(exam => exam.name.includes('高考')); } updateCountdown(new Date()); });
|
现在你可以点击考试名称,在高考和最近的考试之间自由切换~ 这样就不会错过任何一个重要的时间节点啦!
再好看点
作为一个喜欢美的高三党,怎么能容忍界面不好看呢?我换了一张超美的背景图,还调整了页面的整体布局~ 现在看起来是不是舒服多啦?
不过我觉得还不够!我想要让它变得更有趣、更好玩~ 于是我想到了一个超酷的点子——点击波纹效果!
这个效果的JavaScript实现是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| document.addEventListener('click', function(e) { createRipple(e, 1); setTimeout(() => { createRipple(e, 0.7, 0.2); }, 100); });
function createRipple(e, scaleFactor, delay = 0) { const ripple = document.createElement('div'); ripple.classList.add('ripple'); const size = Math.random() * 60 + 80 * scaleFactor; ripple.style.width = `${size}px`; ripple.style.height = `${size}px`; const x = e.clientX - size / 2; const y = e.clientY - size / 2; ripple.style.left = `${x}px`; ripple.style.top = `${y}px`; ripple.style.animationDelay = `${delay}s`; const hue = Math.random() * 60 + 180; ripple.style.background = `radial-gradient(circle, hsla(${hue}, 100%, 70%, 0.4) 0%, hsla(${hue}, 100%, 70%, 0.1) 100%)`; document.body.appendChild(ripple); ripple.addEventListener('animationend', () => { ripple.remove(); }); }
|
配合CSS中的动画效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| .ripple { position: absolute; border-radius: 50%; background: radial-gradient(circle, rgba(255,255,255,0.4) 0%, rgba(255,255,255,0.1) 100%); transform: scale(0); animation: ripple 0.8s cubic-bezier(0.21, 0.98, 0.6, 0.99); pointer-events: none; box-shadow: 0 0 20px rgba(255, 255, 255, 0.3); }
@keyframes ripple { to { transform: scale(6); opacity: 0; } }
|
现在,你只要点击页面的任何地方,就能看到一圈圈蓝绿色的波纹像水波纹一样扩散开来~ 每次点击的波纹大小和颜色都不一样哦,就像在和你玩游戏一样 (๑>◡<๑)
加油!
有一天我学习学累了,盯着倒计时看了好久。突然想:要是能和它互动一下就好了!
于是我又加了个超治愈的功能——双击页面就能触发加油模式!这个功能的实现是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| document.addEventListener('dblclick', function() { const currentExam = exams[currentExamIndex]; const cheerMessage = document.getElementById('cheerMessage'); const blurElements = document.querySelectorAll('.blur-target, .background-container'); blurElements.forEach(el => el.classList.add('blur-background')); setTimeout(() => { cheerMessage.textContent = `${currentExam.name}加油!!!!!ヾ(≧ ▽ ≦)ゝ`; cheerMessage.style.opacity = '1'; setTimeout(() => { cheerMessage.style.opacity = '0'; blurElements.forEach(el => el.classList.remove('blur-background')); }, 2000); }, 500); });
|
当你双击屏幕时,背景会变得朦朦胧胧的,然后跳出超大的加油字样~ 每次看到这个,我都会觉得又充满了动力呢!
改造完成后,我重新写了README文档,告诉大家这个小工具怎么用、有什么功能~ 于是我重新写了README文档
一些收获
通过做这个小项目,我不仅有了一个陪伴自己备考的小工具,还学到了好多前端知识!原来用简单的HTML、CSS和JavaScript就能做出这么有趣的东西呀~
虽然它现在已经很好用了,但我脑子里还有好多新点子呢!比如:
- 让大家可以自己上传喜欢的背景图
- 记住每个人喜欢的设置
这个高考倒计时小工具不仅是一个记录时间的网页,更是我高三生活的一个小小见证,是我学习编程的一次很有趣尝试~
如果你也觉得它有用,欢迎来看看哦!希望它能在你的备考路上给你一点鼓励和动力~ 我们一起加油,向着自己的目标努力吧!(。・ω・。)ノ♡
点击体验我的高考倒计时
来GitHub和我一起完善它吧~