一、安装及使用
pnpm install framer-motion
import { motion } from ‘framer-motion’
二、动画
transition:补间动画,从一种状态到另一种状态
支持的动画类型有:
Tween
Spring
Inertia
动画编排
delayChildren:指定子元素的延迟
staggerChildren:子元素错开延迟
staggerDirection:子元素动画方向,1:正序,-1:倒序
Keyframes:帧动画,按顺序显示每个值
layout:布局动画
父级布局的变更,比如flex或者grid
列表的排序
width,position的变更
layoutScroll:滚动容器动画
LayoutGroup:协调同级元素动画
scroll
useScroll
whileInView
viewport:配置项
三、组件
motion
initial:初始值
animate:执行动画
transition:设置动画类型
variants:预定义动画状态,方便通过标签引用
layout:设置布局动画
layoutScroll:布局滚动
transformTemplate:变换模版,用于设置属性的变化顺序
普通组件转换:
motionComponent = motion(normalComponent)
AnimatePresence:组件移除时,进行动画处理
exit:退出时动画
多个children时,key需要唯一
自定义组件需要 AnimatePresence包裹,才能触发exit动画
lazyMotion:延迟组件加载,减少包大小
MotionConfig:设置所有motion子组件的配置项,prop只接受transition
ReOrder:创建拖动排序效果
四、Motion Value:追踪动画值的状态和速度
useMotionValue
设置或者获取动画的状态
可在多个组件之间同步值
值的改变不会处罚react的渲染周期
支持订阅更新
useMotionValueEvent:订阅来自MutionValue的事件
change
animationStart
animationComplete
animationCancel
useScroll:创建滚动动画
进度指示器
视差效果
useSpring:创建一个运动值,使其具有弹簧动画
useTime:返回一个值,单位毫秒,每帧更新一次
useTransform:通过定义输入范围和输出范围,创建一个新值
useVelocity:接受一个值,返回一个新值,根据动画的速度进行更新
五、Hooks
useAnimate:创建具有作用域和自动清理的动画函数
useAnimationFrame:每个动画帧运行一次回调
useDragControls:定义组件拖动触发器
useInView:判断是否在可视窗口内
六、事件
whileHover
whileTap
whileDrag
whileFocus
whileInView