最轻量兼容方案是纯CSS@keyframes配合animation-delay错开三点闪烁,IE10+支持;SVG适合高定制动画;JS适用于异步控制;需注意暗色模式对比度、移动端性能及点击区域保护。
用 CSS @keyframes 实现三点依次闪烁动画
最轻量、兼容性好(IE10+)、无需 JS 的方案就是纯 CSS 动画。核心是控制三个
或
元素的
,用
错开它们的显示时机。
常见错误是直接给三个元素加相同动画,结果同步闪烁——必须用
手动错开 0.2s 间隔:
动画时长建议设为 1.2s~1.4s,太短显得急促,太长加载感弱
不要用
替代
,它会触发重排,影响性能
如果父容器有
,记得给
加
防止基线偏移
用 SVG + CSS 实现更精细的缩放+位移动画
当需要更高定制性(比如三点沿弧线运动、带阴影、响应式缩放),SVG 是更稳的选择。每个点用
,动画通过
控制
和
。
容易踩的坑是 SVG 内联样式优先级高,外部 CSS 的
可能不生效——务必把动画规则写在
标签里或外部 CSS 中,并确保选择器足够明确:
立即学习
“
前端免费学习笔记(深入)
”;
SVG 的
比固定宽高更适配响应式场景
避免在
上直接写
,内联样式无法被
覆盖
移动端要注意
触发 GPU 加速,但过度缩放可能模糊,
值建议 ≥2.5
用 JavaScript 动态控制三点状态(适合异步加载场景)
当加载逻辑本身由 JS 控制(比如
请求中),用 JS 切换类名比纯 CSS 更可控。关键是避免手动操作 DOM 节点顺序,改用统一 class 控制状态。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
典型错误是每次重新生成 HTML 字符串拼接三点——这会破坏事件绑定、触发重排,且无法复用已有节点:
CSS 中只需定义
,其余交由 JS 调度
不要用
,
递归更精准,避免定时器堆积
如果加载完成需销毁动画,记得保存
并调用
移动端和暗色模式下的适配要点
三点动画在 iPhone Safari 或深色模式下容易看不清,不是“加粗”或“改颜色”就能解决的。
关键要区分语义:加载动画本质是“视觉节奏提示”,不是装饰。所以适配重点在对比度与节奏稳定性:
用
媒体查询单独设置暗色模式下的
或
,别依赖系统自动反色
避免使用
这类灰度值,iOS 暗色模式下会变淡到不可见,改用
或带透明度的
动画帧率在低端安卓机上易掉帧,可加
提前提示渲染层,但仅对频繁变化的元素启用
如果三点用于按钮内部,确保点击区域不因动画缩小而误触——给父容器设
或
真正难的不是让三点动起来,而是动得恰到好处:不抢眼、不干扰、不卡顿,且在各种屏幕和系统设置下都保持可感知的节奏。
•opacity@keyframesanimation-delay@keyframes dot-pulse {
0%, 100% { opacity: 0.4; }
50% { opacity: 1; }
}
.dot {
display: inline-block;
width: 8px;
height: 8px;
background: #333;
border-radius: 50%;
animation: dot-pulse 1.2s infinite;
}
.dot:nth-child(1) { animation-delay: 0s; }
.dot:nth-child(2) { animation-delay: 0.2s; }
.dot:nth-child(3) { animation-delay: 0.4s; }
visibility: hiddenopacitytext-align: center.dotvertical-align: middletransformscaletranslateXanimation
viewBoxstyle="animation:...":nth-childtransformrfetch
•
•
•
.dot.active { opacity: 1; }setIntervalsetTimeouttimeoutIdclearTimeoutprefers-color-scheme: darkfillbackground#ccc#a0a0a0rgba(0,0,0,0.6)will-change: opacitymin-widthpadding