使用 Framer Motion 实现滚动动画

Framer Motion 是一个强大的 React 动画库,它提供了简单、强大和可扩展的 API,用于创建各种类型的动画效果。

本文介绍Framer Motion 的基本使用,和如何使用其提供的 API 快速实现滚动动画。

基本使用

Framer Motion 的核心是提供了 HTML 元素和 SVG 元素对应的 motion组件,将对应的元素替换为 motion 组件,并且属性配置简单的初始状态、目标状态和过渡效果即可实现动画效果。

tsx 复制代码
import { motion } from 'framer-motion';

const App = () => {
  return (
    <motion.div
      initial={{ opacity: 0, scale: 0 }}
      animate={{ opacity: 1, scale: 1}}
      transition={{ duration: 0.5 }}
    >
      Hello Framer Motion!
    </motion.div>
  );
};

在这个示例中,我们使用 motion.div 包裹一个 <div> 元素,然后定义了 initialanimatetransition 属性来指定初始状态、目标状态和过渡效果。在初始状态下,元素的透明度(opacity)和缩放比例(scale)都是 0,然后通过 animate 属性指定了目标状态,透明度和缩放比例都是 1。transition 属性定义了过渡效果的持续时间为 0.5 秒。

滚动动画

实现常见的页面滚动到指定元素时展示动画,只需要使用 whileInView 这个属性定义元素出现时的样式,比如透明度,大小,偏移位置等。

示例代码如下,定义刚开始时透明度为 0(即不可见),当滚动到元素时设置为透明度 1,元素可见并且会一淡入的动画效果展示。

tsx 复制代码
<motion.div
  initial={{ opacity: 0 }}
  whileInView={{ opacity: 1 }}
/>

实现效果图:

通过设置其他更多样式和属性,我们可以更自由的配置想要的动画效果。如初始位置为 30px,元素可见时从上往下展示,通过 viewporttransition 属性设置动画的展示时机和方式。

tsx 复制代码
<motion.div
  initial={{ opacity: 0, y: 30 }}
  whileInView={{ opacity: 1, y: 0 }}
  viewport={{ once: true }}
  transition={{ duration: 1 }}
>

Framer Motion 是一个强大的动画库,能实现各种简单和复杂的动画效果,更多的使用方式和动画效果可以参考Framer Motion 文档

参考链接

相关推荐
zzzzzz3107 分钟前
36K stars 之外:如何阅读 react-bits 这样的动画交互式 React 项目
javascript·react.js·动效
ljt27249606619 分钟前
Flutter笔记--envied
前端·笔记·flutter
Flynt29 分钟前
React Router v8 升了之后,我花了两天才把项目跑起来
前端·typescript·preact
泯泷7 小时前
手搓JSVMM第 8 篇:函数调用:参数、返回值与调用帧
前端·javascript·前端框架
Sherotree7 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
里欧跑得慢8 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢8 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
苏灿烤鱼9 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
泯泷9 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法
泯泷9 小时前
手搓JSVM第 7 篇:控制流:if、while 与 jump
前端·javascript·算法