Transfrom

transform(inputValue, inputRange, outputRange, options): T

这个方法能把传入的inputValue转换成inputRange和outputRange映射后的在outputRange范围内的映射值。返回一个数据的类型决定于你传入数据的类型。

当你传入的inputRange是一个[0,200]的数组,同时你传入的outputRange是[0,1],那么这个函数返回的是就是0到1范围内的一个数,当然,前提是你传入的数据是在0-200范围内的。你传入的值必须是这个连续范围内一个数。outputValue范围类型支持数字、颜色、投影、数组和对象以及更多。每一个返回的值的类型都和输入的inputValue值保持一致。

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

export function MyComponent() {
   const inputRange = [0, 200]
   const outputRange = [0, 1]
   const output = transform(100, inputRange, outputRange)

   // Returns 0.5
   return <Frame>{output}</Frame>
}

inputValue: number

一个需要被转换的数据

inputRange: number[]

inputValue的值的范围

outputRange: T[]

支持多种数据类型,比如numbers, colors, shadows, arrays和objects

options: TransformOptions<T>

Clamp: 是否现在数据在给定的范围内,默认是true

returns: T

Ranges

transform方法同样也支持传入的范围数组包含的数据超过2个。比如说下面这个例子,当inputValue是[ -200, -100, 100, 200 ],outputValue 范围是[ 0, 1, 1, 0 ],那么这个函数会返回:

- 当inputValue的值在 -200 到 -100之间,那么返回一个值是0到1范围的

- 当inputValue的值在-100 到 100之间,那么返回的值都是1

- 当inputValue的值在100 到 200之间,那么返回的值是1到0的范围

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

export function MyComponent() {
  const inputRange = [-200, -100, 100, 200]
  const outputRange = [0, 1, 1, 0]
  const output = transform(150, inputRange, outputRange)
  // output equals 0.5
  return <Frame>{output}</Frame>
}

transform(inputRange, outputRange, options): (inputValue: number) => T

为了提高运行效果,可以先将inputRange和outputRange传入到transform函数中,这将回返回一个函数。然后再将要转换的数据,在需要转换时传进去。

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

export function MyComponent() {
    const inputRange = [-200, -100, 100, 200]
    const outputRange = [0, 1, 1, 0]
    const convertRange = transform(inputRange, outputRange)
    const output = convertRange(-150)

    // Returns 0.5
    return <Frame>{output}</Frame>
}

inputRange: number[]

连续的数据值范围

outputRange: T[]

支持多种数据类型,比如numbers, colors, shadows, arrays和objects

options: TransformOptions<T>

Clamp: 是否现在数据在给定的范围内,默认是true

returns: (inputValue: number) => T

Last updated

Was this helpful?