如何实现网页文本闪烁变色?网页闹钟定时触发剩余时间闪烁效果
网页闹钟15分钟间隔闪烁效果实现方案
原有代码核心问题
- id大小写不匹配:JS中获取的元素id是
Remainclock,CSS选择器写的是#RemainClock(C大写),样式无法正常匹配生效 - 剩余时间计算逻辑错误:时间差计算后多余的取模、转字符串操作,导致15分钟整数倍的判断逻辑完全失效
- 缺少定时器清理逻辑:触发条件满足时反复创建
setInterval,会导致动画卡顿、到停止时间也无法关闭闪烁 - 无闪烁状态标记:没有判断当前是否已经在执行闪烁,会重复触发效果造成逻辑混乱
修正后的CSS代码
统一id大小写,用CSS动画实现闪烁效果,性能远高于JS手动修改样式:
/* id和JS、HTML保持一致,全部用小写c */ #Remainclock { font-family: 'Orbitron', sans-serif; font-size: 5vw; background-image: linear-gradient(180deg, rgba(99,253,136,1) 0%, rgba(51,197,142,1) 50%, rgba(39,97,116,1) 100%); background-clip: text; -webkit-background-clip: text; -moz-background-clip: text; -webkit-text-fill-color: transparent; -moz-text-fill-color: transparent; transition: all 0.2s ease; } /* 闪烁效果类,触发时动态添加 */ #Remainclock.blink-effect { animation: blink 1s infinite; } /* 闪烁变色动画:红/黄渐变交替+透明度变化 */ @keyframes blink { 0%, 100% { background-image: linear-gradient(180deg, rgba(255,87,87,1) 0%, rgba(255,52,52,1) 50%, rgba(180,20,20,1) 100%); opacity: 1; } 50% { background-image: linear-gradient(180deg, rgba(255,235,59,1) 0%, rgba(255,193,7,1) 50%, rgba(214,130,16,1) 100%); opacity: 0.7; } }
修正后的JS代码
修复时间计算逻辑,增加定时器防重复和自动清理逻辑:
// 全局存储闪烁定时器id,方便后续销毁 let blinkTimer = null; // 确保pDateTime是你预设的闹钟响铃时间,为全局可访问的Date对象 function blinking() { const remainClockEl = document.getElementById("Remainclock"); // 计算当前剩余毫秒数 const remainMs = pDateTime.getTime() - new Date().getTime(); // 向上取整算剩余分钟数,避免差几秒到整15分钟时提前/漏触发 const remainingMinutes = Math.ceil(remainMs / 60000); // 触发条件:剩余分钟为15的正整数倍、当前没有在执行闪烁 if(remainingMinutes % 15 === 0 && remainingMinutes > 0 && !blinkTimer) { // 添加闪烁类启动效果 remainClockEl.classList.add('blink-effect'); // 每秒检查一次是否到停止时间 blinkTimer = setInterval(() => { const currentRemainMs = pDateTime.getTime() - new Date().getTime(); const currentRemainMinutes = Math.ceil(currentRemainMs / 60000); // 剩余分钟不再是15的倍数时,移除效果、清理定时器 if(currentRemainMinutes % 15 !== 0) { remainClockEl.classList.remove('blink-effect'); clearInterval(blinkTimer); blinkTimer = null; } }, 1000) } } // 主逻辑每秒执行一次检查即可,不要在blinking函数内部重复创建定时器 setInterval(blinking, 1000);
效果说明
- 剩余时间为15、30、45、60……整15倍数分钟时,自动触发红黄色交替闪烁效果
- 闪烁持续整1分钟,等剩余时间走到14、29、44……分钟时自动停止,恢复原本的绿色渐变样式
- 做了定时器防重复处理,不会出现页面卡顿、闪烁无法停止的问题
内容的提问来源于stack exchange,提问作者Argaros
相关产品推荐
相关产品推荐

