前端用SSE实现股票行情红绿闪烁,核心是建立EventSource长连接监听增量数据、维护价格缓存对比涨跌、通过预设CSS类切换实现平滑闪烁动画,并加节流防抖与局部DOM更新。

前端用 SSE 实现股票行情红绿闪烁,核心是监听服务端推送的实时数据、对比前值判断涨跌、用 CSS 过渡或 class 切换实现秒级局部样式变化,避免整页重绘。
建立 SSE 连接并解析增量数据
股票行情通常只推送变化字段(如最新价、涨跌幅),而非全量刷新。前端需维护一个轻量缓存对象,记录每个股票代码的上一价格,用于比对:
- 用 EventSource 建立长连接,设置
withCredentials: true(如需鉴权) - 监听
message事件,event.data一般是 JSON 字符串,需JSON.parse - 推荐按股票 code 做 key 缓存,例如
cache[code] = { price: 12.34, timestamp: Date.now() }
用 class 切换实现红绿闪烁,不依赖 JS 动画
直接操作 style.color 或 style.backgroundColor 会阻塞渲染且难控制持续时间。更稳妥方式是预设 CSS 类,用 JS 切换:
前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。
- 定义两个类:
.up-flash { color: #f00; animation: flash-up 1s ease-in-out; }和.down-flash { color: #0a0; animation: flash-down 1s ease-in-out; } - CSS 中用
@keyframes控制:比如0% { opacity: 1; } 50% { opacity: 0.7; } 100% { opacity: 1; },避免突兀跳变 - 每次更新时先移除旧状态类(
el.classList.remove('up-flash', 'down-flash')),再根据 delta 添加新类
防抖闪烁 + 避免连续触发视觉干扰
行情可能一秒多条(如集合竞价阶段),若每条都闪,体验反而混乱。需加简单节流逻辑:
立即学习“Java免费学习笔记(深入)”;
- 为每个股票元素维护一个
flashLock时间戳,每次闪前检查距上次是否超过 800ms - 或者统一用
setTimeout延迟清除 class(如 1200ms 后自动 remove),期间新闪请求到来则 clearTimeout 再重设 - 对「未变」或「变化极小(如 ±0.01)」的数据不触发闪烁,提升专注度
局部更新 DOM,不重建整个列表
看板常含几十只股票,切忌用 innerHTML 重绘整块。应精准定位并更新:
- 给每行绑定唯一 data-code 属性:
<tr data-code="600519"><td class="price">1823.50</td></tr> - 收到推送后用
document.querySelector(`[data-code="${code}"] .price`)找到对应 price 元素 - 仅更新 textContent,并按逻辑添加/移除闪烁 class,其他字段(如涨跌幅、成交量)同理局部处理

















