CSS工具库Three Dots实战_各种精美的三个点加载动画

1次阅读

three dots 加载动画不显示的根本原因是 css 未正确注入或组件未被识别为自定义元素,需显式引入 js 脚本注册,纯 css 引入无效;颜色、大小、速度须通过 color、size、speed 属性控制;ssr 环境需延迟注册;轻量替代方案可用纯 css 实现。

CSS工具库Three Dots实战_各种精美的三个点加载动画

Three Dots 为什么加载动画不显示?

根本原因通常是 CSS 未正确注入或 three-dots 组件没被浏览器识别为自定义元素——它不是原生 HTML 标签,得靠 JS 注册。如果你直接写 <three-dots></three-dots> 却没引入对应脚本,页面就啥也不渲染。

  • 必须显式引入 JS 文件(如通过 <script src="https://unpkg.com/three-dots@2.1.0/dist/three-dots.min.js"></script>),CDN 地址别用错版本
  • 不能只引入 CSS;这个库的样式是 JS 动态注入的,纯 CSS 引入无效
  • 若用构建工具(Vite/webpack),需确保插件支持自定义元素,或手动调用 defineCustomElements()
  • 检查控制台是否报错 CustomElementRegistry.define: 'three-dots' has already been defined——重复注册会导致后续实例失效

怎么改颜色、大小和速度?

所有样式都靠 HTML 属性控制,不推荐直接写 CSS 覆盖,因为动画依赖内联 transform 和 opacity 计算。

  • 改颜色:传 color 属性,值为合法 CSS 颜色,如 color="#3b82f6"color="var(--primary)"
  • 改大小:用 size(单位是 px,默认 24),比如 size="16";注意它会等比缩放整个动画区域
  • 改速度:用 speed(单位是 ms,默认 500),数值越小越快,speed="300" 就比默认快 40%
  • 不要设 font-sizewidth 在标签上——这些会被 JS 忽略,不起作用

React/Vue 里用 Three Dots 为啥报错 “Failed to construct ‘CustomElement’”?

这是框架在服务端渲染(SSR)或 hydrate 阶段尝试执行了浏览器专属 API。Three Dots 的自定义元素只能在客户端注册。

  • React:用 useEffect 延迟到浏览器环境再注册,或用 dynamic(import(), { ssr: false }) 懒加载组件
  • Vue(尤其 Nuxt):把 <three-dots></three-dots> 包在 <clientonly></clientonly> 里,或在 onMounted 中动态 import()defineCustomElements()
  • 别在 setup() 顶层或 getStaticProps 里调 customElements.define()——那会炸
  • 如果用了 Shadow dom 模式(默认开启),确保父容器没设 overflow: hidden,否则三个点可能被裁掉

替代方案比 Three Dots 更轻量吗?

是的,大多数场景下没必要用它。Three Dots 打包后 JS 约 4.2KB(gzip 后 1.8KB),而一个纯 CSS 实现的三连点动画只需不到 0.5KB。

立即学习前端免费学习笔记(深入)”;

  • 简单加载状态:用 @keyframes + 三个 <span></span>,配合 animation-delay 错开时机,完全零依赖
  • 需要响应式?加个 font-size: clamp(0.75rem, 4vw, 1rem) 就行,不用 JS 计算
  • Three Dots 的真正价值只在“快速统一设计语言+多主题切换”,但前提是团队真在用它的主题系统,否则就是负优化
  • 如果项目已用 Lit 或 Stencil,可以考虑自己封装一个更可控的 loading-dots,去掉冗余生命周期

事情说清了就结束。真正卡住人的,往往不是“怎么让点动起来”,而是“为什么动了却看不见”——八成是 JS 没跑、属性拼错了,或者框架提前渲染了。

text=ZqhQzanResources