01 借助Data传递参数

操作后改变 data 的值,设定动画参数为 data 的值,data 值改变时动画开始。

2020-02-06 20.32.33.gif

  1. import { Data, Override } from "framer"
  2. const data = Data({
  3. rotate: 0,
  4. })
  5. export function ClickRotate(): Override {
  6. return {
  7. animate: { rotate: data.rotate },
  8. onTap() {
  9. data.rotate = data.rotate + 90
  10. },
  11. // 语法二
  12. // onTap:()=>{data.rotate=data.rotate+90}
  13. }
  14. }

或者使用 Hook 的方式。

  1. import * as React from "react"
  2. import { Override } from "framer"
  3. export function ClickRotate(): Override {
  4. // const rotate=0
  5. const [rotate, setRotate] = React.useState(0)
  6. return {
  7. // 点击时 rotate 的值改变
  8. onTap() {
  9. setRotate(rotate + 90)
  10. },
  11. animate: { rotate: rotate },
  12. }
  13. }

02 颜色渐变动画&循环 yoyo: infinity

2020-02-24 17.16.10.gif

import * as React from "react"
import { Frame, Override } from "framer"

export function Animation_Color(): Override {
    return {
        animate: {
            backgroundColor: "white",
            transition: {
                duration: 1,
                yoyo: Infinity,
            },
        },
    }
}

03 loop:infinity

设置 transtion zhon中 loop的值为 infinity 可使动画重复。

2020-02-06 21.21.09.gif

export function Loop(): Override {
    return {
        animate: { rotate: 360 },
        transition: { duration: 0.1, loop: Infinity, ease: "linear" },
    }
}

04 initial 初始状态

两种方法设置 initial 状态。

export function asValues(): Override {
    return {
        initial: { opacity: 0.5 },
    }
}

export function asVariants(): Override {
    const variants = {
        state1: {
            opacity: 0.1,
        },
        state2: {
            opacity: 1,
        },
    }
    return {
        initial: "state1",
        variants: variants,
    }
}

05 Keyframes 关键帧

关键帧,通过关键帧的方式设定动画参数。

2020-02-24 17.09.25.gif

export function Motion() {
    return (
        <Frame width={600} height={450} background={"#0055ff"}>
            <Frame
                animate={{
                    scale: [1, 2, 2, 1, 1],
                    rotate: [0, 0, 270, 270, 0],
                    borderRadius: ["20%", "20%", "50%", "50%", "20%"],
                    transition: {
                        duration: 1.4,
                        yoyo:Infinity,
                        repeatDelay:1,
                    },
                }}
                center={true}
                width={100}
                height={100}
                background={"white"}
            />
        </Frame>
    )
}

06 onAnimationStart

定义在 animate 中的动画开始时的回调函数。

07 onAnimationComplete

定义在 animate 中的动画结束时的回调函数。