01 属性值

参数 意义 默认值
rotateX 绕 X 轴 3D 转动 0
rotateY 绕 Y 轴 3D 转动 0
rotateZ 绕 Z 轴 3D 转动 0
originX X 轴的锚点位置 0.5
originY Y 轴的锚点位置 0.5
originZ Y 轴的锚点位置 0.5
perspective 透视程度,值太大的话透视效果也不明显 0
preserve3d 将其子级内容放置在 3D 空间内 false

02 静态 3D

为父级添加 perspective 属性(其大小决定对象变形的程度),为子级设置 rotateX 值和 3D 变换轴心位置 originY。

image.png

  1. // 父级设置
  2. export function parent(): Override {
  3. return {
  4. perspective: 150,
  5. // preserve3d: true,
  6. }
  7. }
  8. //子级设置
  9. export function child(): Override {
  10. return {
  11. rotateX: 30,
  12. originY:1
  13. }
  14. }

02 点击后翻转卡片

2020-06-04 21.28.48.gif

  1. import * as React from "react"
  2. import { Override, Data } from "framer"
  3. const data = Data({
  4. rotateY: 0,
  5. })
  6. export function button(): Override {
  7. return {
  8. onTap() {
  9. data.rotateY = data.rotateY + 180
  10. },
  11. }
  12. }
  13. // 父级设置
  14. export function parent(): Override {
  15. return {
  16. // 当 perspective 值为 150 时,变形很明显,值变大时变形变小
  17. perspective: 1500,
  18. // preserve3d: true,
  19. }
  20. }
  21. //子级设置
  22. export function child(): Override {
  23. return {
  24. animate: {
  25. rotateY: data.rotateY,
  26. },
  27. transition: {
  28. duration: 0.2,
  29. },
  30. // rotateY: data.rotateX,
  31. originX: 0.5,
  32. }
  33. }

https://framer.com/projects/15-Perspective-Wg14xPHDxhyvPe6abAFU

04 拖动改变透视值

左右拖动时联动改变透视效果。

2020-03-01 17.25.49.gif

  1. import * as React from "react"
  2. import { Override, motionValue, useTransform } from "framer"
  3. // 创造一个能在多个地方传递的值 x
  4. const x = motionValue(0)
  5. // 父级设置
  6. export function parent(): Override {
  7. return {
  8. perspective: 150,
  9. // preserve3d: true,
  10. }
  11. }
  12. // 子级设置
  13. export function child(): Override {
  14. // x在 -100、0、100 之间变化时,rotateY 在 -45、0、 45 之间变化
  15. const rotateY = useTransform(x, [-100, 0, 100], [-45, 0, 45], {
  16. clamp: false,
  17. })
  18. return {
  19. x: x,
  20. drag: "x",
  21. rotateY: rotateY,
  22. dragConstraints: {
  23. left: -100,
  24. right: 100,
  25. },
  26. dragElastic: false,
  27. dragMomentum: false,
  28. }
  29. }