SuperAPI AI 工具集

auto-animate

前端与建站

查看项目

更新于 10-15 15:33

技能介绍

用途

AutoAnimate 是一个零配置动画库,包名为 @formkit/auto-animate,体积约 3.28kb,支持 React、Vue、Solid、Svelte、Preact 等框架。它通过给父元素绑定 ref,自动为子元素的添加、删除和移动添加过渡动画,无需手写动画逻辑。本技能是一份错误预防指南,帮助开发者规避该库的 15 个已知问题。

主要能力

  • 零配置:只需将 ref 绑定到父元素即可启用动画。
  • 多框架支持:React、Vue、Solid、Svelte、Preact。
  • 自动尊重 prefers-reduced-motion(不应关闭此行为)。
  • 提供 SSR 安全模式,适用于 Cloudflare Workers、Next.js 等服务端环境。

使用方式

SSR 安全模式(关键):使用仅客户端动态导入,避免服务端报错。

import { useState, useEffect } from "react";

export function useAutoAnimateSafe<T extends HTMLElement>() {
  const [parent, setParent] = useState<T | null>(null);

  useEffect(() => {
    if (typeof window !== "undefined" && parent) {
      import("@formkit/auto-animate").then(({ default: autoAnimate }) => {
        autoAnimate(parent);
      });
    }
  }, [parent]);

  return [parent, setParent] as const;
}

安装依赖:

{
  "dependencies": {
    "@formkit/auto-animate": "^0.9.0"
  }
}

15 个已知问题与预防

  1. SSR/Next.js 导入错误:AutoAnimate 使用服务端不可用的 DOM API,应使用动态导入。
  2. 条件渲染父元素:ref 无法绑定到不存在的元素,应保持父元素始终渲染,仅条件渲染子元素。
  3. 缺少唯一 key:应使用稳定唯一 key(如 key={item.id}),不要用索引。
  4. Flexbox 宽度与抖动:flex-grow 会导致时序问题,应使用显式固定宽度。
  5. 表格行显示问题:display: table-row 与动画冲突,应作用于 tbody 或改用 div 布局。
  6. Jest 测试错误:Jest 无法正确解析 ESM 导出,需配置 moduleNameMapper。
  7. esbuild 兼容性:ESM/CommonJS 条件不匹配,需正确配置 esbuild。
  8. CSS position 副作用:父元素会被自动加上 position: relative,需在 CSS 中考虑或显式设置。
  9. Vue/Nuxt 注册错误:插件未正确注册,需在配置中正确设置;Nuxt 3 需 v0.8.2+。
  10. Angular ESM 问题:CommonJS 构建环境导致失败,需为 Angular Package Format 配置 ng-packagr。
  11. React 19 StrictMode 双重调用:StrictMode 会调用两次 useEffect,需用 ref 跟踪初始化。
  12. 视口外动画失效:Chrome 可能不为屏幕外元素运行动画 API,应确保父元素可见后再应用。
  13. 删除元素遮挡内容:退出动画保持 z-index 覆盖内容,需显式处理 z-index。
  14. 拖拽时无法禁用:enable(false) 在拖拽中不可靠,应在拖拽时条件性移除 ref。
  15. 父级 transform 位置错误:元素记住 transform 前的位置,应延迟到 transform 完成后再启用。

关键规则

应做:使用唯一稳定 key;保持父元素在 DOM 中;SSR 环境仅客户端导入;保留对减少动效偏好的尊重;在禁用动效下测试;使用显式宽度;表格作用于 tbody。

不应做:条件渲染父元素;用索引作 key;忽略 SSR;强制动画(disrespectUserMotionPreference: true 会破坏无障碍);直接动画表格;跳过唯一 key;使用复杂动画(复杂场景应改用 Motion)。

适用场景

列表增删与排序、手风琴、Toast 通知、表单等需要轻量过渡动画的前端界面。

限制

仅适合简单过渡动画,复杂动画应使用 Motion。存在上述 15 个已知问题需按指南规避。社区技巧(如测试冻结、内存泄漏预防)来自社区讨论,需自行对照版本验证。

版本信息

最新版本:@formkit/auto-animate@0.9.0(2025 年 9 月 5 日)。v0.8.2(2024 年 4 月 10 日)修复了 Nuxt 3 ESM 导入与 ResizeObserver 守卫。框架兼容:React 18+、Vue 3+、Solid、Svelte、Preact。Nuxt 3 用户需 v0.8.2+。

官方资源

官网:https://auto-animate.formkit.com GitHub:https://github.com/formkit/auto-animate npm:https://www.npmjs.com/package/@formkit/auto-animate React 文档:https://auto-animate.formkit.com/react