npm 包 framer-motion 使用教程

阅读时长 8 分钟读完

在前端开发过程中,我们经常需要在页面上有动态效果,通过添加 css 动画是一种传统方式。然而,在大型应用程序中,手动管理动画状态可以变得非常麻烦。此时,现代前端库和框架为我们提供了很多使用更简单、灵活的动画工具。其中,npm 包 Framer-motion 是一种非常常用且功能强大的工具。

Framer-motion 是一个基于 React 的动画库,它提供了很多功能强大、易于使用和灵活的组件,能够轻松创建复杂的、流畅的交互动画。这篇文章将介绍如何在项目中使用 Framer-motion 包制作动画效果。

安装 framer-motion

在开始使用 Framer-motion 之前,我们需要在项目中安装这个包。我们可以通过运行以下命令安装:

使用 Framer-motion

接下来我们来看看如何使用 Framer-motion 包,主要有如下 4 个组件:

  1. motion

motion 是 Framer-motion 的基本组件,它的作用是将其子元素用动画包装起来,通过 Tween 的形式实现渐进动画,motion 标签可以设置一系列 onClick、onDragEnd 等常用事件来实现特定的交互效果。

上述代码表示创建一个简单的 div 元素,它将被向右移动 100px,通过 animate 属性来实现。

  1. AnimatePresence

AnimatePresence 用于对整个组件进行进入和退出动画控制,可以用于路由切换和区块切换时控制动画流程,如下代码表示一个简单的在 div 元素在实现进入和退出动画:

-- -------------------- ---- -------
------ - ------- --------------- - ---- ----------------
----- ----------- - -
  ------- - -------- -- -- -------- --
  -------- - -------- -- -- - --
--
----- --- - -- -- -
  ----- ----------- ------------- - ----------------
  ------ -
    ------- ----------- -- -----------------------------------------
    -----------------
      ---------- -- -
        -----------
          ----------------
          -----------------
          -------------
          ----------------------
        --
      --
    ------------------
  --
--

上述代码中,我们通过 useState 进行动态控制 isVisible 属性,点击 button 实现 div 的进入和退出动画,boxVariants 对象为 div 渐进动画的属性,AnimatePresence 组件用于包含 motion 组件,控制整个过程的渐进过渡。

  1. useAnimation

useAnimation 是一种 hooks 命名,它创建了一个能够控制动画的对象,通过控制对象状态达到控制动画的目的,使用方式如下:

-- -------------------- ---- -------
------ - ------- ------------ - ---- ----------------
----- --- - -- -- -
  ----- -------- - ---------------
  ----- ------------- - -- -- -
    ---------------- -- --- ---
  --
  ------ -
    -------------- ----------------------- -------------------
      ----- ---
    ----------------
  --
--

上述代码中,handleOnClick 函数实现了点击按钮 div 元素向右移动的效果,控制效果的在一开始创建了一个 useAnimation() 的对象,当点击之后通过对象的 start() 方法来控制 div 的暂停和开始。

  1. useDrag/useMotionValue

与 useAnimation 相似,useDrag 和 useMotionValue 组件是 Framer-motion 包提供的更灵活的动画控制组件,其中 useMotionValue 提供了一段平滑值的存储和动态修改,而 useDrag 可以控制一个 div 随拖动进行一些巧妙的控制。如下代码演示了拖拽一个 div 元素的过程:

-- -------------------- ---- -------
------ - -------- - ---- --------
------ - ------- --------------- ------- - ---- ----------------
----- --- - -- -- -
  ----- ------------ -------------- - ----------------
  ----- - - ------------------
  ----- - - ------------------
  ----- ------------ - ---------
    ------------ -- -- --------------------
    ---------- -- -- ---------------------
    ------- ------- -- -
      ----------------------
      ----------------------
    --
  ---
  ------ -
    -----------
      -----------
      -----
      -----
      ---------- ------ ---------- - --- - - --
      ------------- --------- --- --
      ------------------ ----- -- ---- -- ------ ---- ------- --- --
      -----------------
    -
      ---- ---
    -------------
  --
--

上述代码中,我们实现了一个能够拖拽的 div 元素,该元素拖拽后能保存其状态并进行过渡动画。

示例代码

最后,我们来看一下一段应用 framer-motion 制作的 FlipCard 组件的示例代码,具体实现的效果如下图:

-- -------------------- ---- -------
------ - -------- - ---- --------
------ - ------- --------------- - ---- ----------------

----- -------- - -
  -------- - -------- - --
  ------- - -------- --- --
--

----- -------- - -- ------ ---- -- -- -
  ----- ----------- ------------- - ----------------
  ----- ------------- - -- -- -
    -------------------------
  --
  ------ -
    ---- --------------------- ------------------------
      ---------------- --------------- ----------------
        -----------
          ---------------------------
          -------------- - ------ - --------
          -------------------
          ------------------ - -------- - ----------
          -------------
        -
          -------
        -------------
        -----------
          ---------------------------
          -------------- - ------- - -------
          -------------------
          ------------------ - --------- - ---------
          -------------
        -
          ------
        -------------
      ------------------
    ------
  --
--

------ ------- ---------

上述代码中,我们通过创建一个 FlipCard 组件以及 front 和 back 的传递参数来实现一个美观的卡片翻转效果。

总之,Framer-motion 是一个非常实用的 React 动画库,它支持许多功能丰富、易于实现和灵活的动画工具,在大型项目开发中非常实用。希望这篇文章能够帮助你了解 Framer-motion 的使用和实现方式,同时也能给你带来更好的动画制作体验和控制。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5ef99048403f2923b035b9e6

纠错
反馈