useTransition
值之间的过渡
演示
三次贝塞尔曲线: 0.00
自定义函数: 0.00
向量: [0.00, 0.00]
用法
定义一个要跟随的数值源值,当该值更改时,输出将过渡到新值。如果在过渡进行中源值发生变化,则将从先前过渡中断的位置开始新的过渡。
js
import { TransitionPresets, useTransition } from '@vueuse/core'
import { ref } from 'vue'
const source = ref(0)
const output = useTransition(source, {
duration: 1000,
transition: TransitionPresets.easeInOutCubic,
})
要同步过渡,请使用数字数组。例如,以下是如何在颜色之间进行过渡。
js
const source = ref([0, 0, 0])
const output = useTransition(source)
const color = computed(() => {
const [r, g, b] = output.value
return `rgb(${r}, ${g}, ${b})`
})
可以使用三次贝塞尔曲线自定义过渡缓动。这样定义的过渡与CSS 缓动函数的工作方式相同。
js
useTransition(source, {
transition: [0.75, 0, 0.25, 1],
})
以下过渡可以通过 TransitionPresets
常量获得。
线性
easeInSine
easeOutSine
easeInOutSine
easeInQuad
easeOutQuad
easeInOutQuad
easeInCubic
easeOutCubic
easeInOutCubic
easeInQuart
easeOutQuart
easeInOutQuart
easeInQuint
easeOutQuint
easeInOutQuint
easeInExpo
easeOutExpo
easeInOutExpo
easeInCirc
easeOutCirc
easeInOutCirc
easeInBack
easeOutBack
easeInOutBack
对于更复杂的过渡,可以提供自定义函数。
js
function easeOutElastic(n) {
return n === 0
? 0
: n === 1
? 1
: (2 ** (-10 * n)) * Math.sin((n * 10 - 0.75) * ((2 * Math.PI) / 3)) + 1
}
useTransition(source, {
transition: easeOutElastic,
})
要控制过渡何时开始,请设置 delay
值。要围绕过渡编排行为,请定义 onStarted
或 onFinished
回调。
js
useTransition(source, {
delay: 1000,
onStarted() {
// called after the transition starts
},
onFinished() {
// called after the transition ends
},
})
要暂时停止过渡,请定义一个布尔值 disabled
属性。请注意,这与 duration
为 0
不同。禁用的过渡同步跟踪源值。它们不尊重 delay
,也不触发 onStarted
或 onFinished
回调。
为了获得更多控制,可以使用 executeTransition
手动执行过渡。此函数返回一个在完成时解析的 Promise。可以通过定义一个返回真值的 abort
函数来取消手动过渡。
js
import { executeTransition } from '@vueuse/core'
await executeTransition(source, from, to, {
duration: 1000,
})
类型声明
显示类型声明
typescript
/**
* Cubic bezier points
*/
export type CubicBezierPoints = [number, number, number, number]
/**
* Easing function
*/
export type EasingFunction = (n: number) => number
/**
* Transition options
*/
export interface TransitionOptions {
/**
* Manually abort a transition
*/
abort?: () => any
/**
* Transition duration in milliseconds
*/
duration?: MaybeRef<number>
/**
* Easing function or cubic bezier points for calculating transition values
*/
transition?: MaybeRef<EasingFunction | CubicBezierPoints>
}
export interface UseTransitionOptions extends TransitionOptions {
/**
* Milliseconds to wait before starting transition
*/
delay?: MaybeRef<number>
/**
* Disables the transition
*/
disabled?: MaybeRef<boolean>
/**
* Callback to execute after transition finishes
*/
onFinished?: () => void
/**
* Callback to execute after transition starts
*/
onStarted?: () => void
}
declare const _TransitionPresets: {
readonly easeInSine: readonly [0.12, 0, 0.39, 0]
readonly easeOutSine: readonly [0.61, 1, 0.88, 1]
readonly easeInOutSine: readonly [0.37, 0, 0.63, 1]
readonly easeInQuad: readonly [0.11, 0, 0.5, 0]
readonly easeOutQuad: readonly [0.5, 1, 0.89, 1]
readonly easeInOutQuad: readonly [0.45, 0, 0.55, 1]
readonly easeInCubic: readonly [0.32, 0, 0.67, 0]
readonly easeOutCubic: readonly [0.33, 1, 0.68, 1]
readonly easeInOutCubic: readonly [0.65, 0, 0.35, 1]
readonly easeInQuart: readonly [0.5, 0, 0.75, 0]
readonly easeOutQuart: readonly [0.25, 1, 0.5, 1]
readonly easeInOutQuart: readonly [0.76, 0, 0.24, 1]
readonly easeInQuint: readonly [0.64, 0, 0.78, 0]
readonly easeOutQuint: readonly [0.22, 1, 0.36, 1]
readonly easeInOutQuint: readonly [0.83, 0, 0.17, 1]
readonly easeInExpo: readonly [0.7, 0, 0.84, 0]
readonly easeOutExpo: readonly [0.16, 1, 0.3, 1]
readonly easeInOutExpo: readonly [0.87, 0, 0.13, 1]
readonly easeInCirc: readonly [0.55, 0, 1, 0.45]
readonly easeOutCirc: readonly [0, 0.55, 0.45, 1]
readonly easeInOutCirc: readonly [0.85, 0, 0.15, 1]
readonly easeInBack: readonly [0.36, 0, 0.66, -0.56]
readonly easeOutBack: readonly [0.34, 1.56, 0.64, 1]
readonly easeInOutBack: readonly [0.68, -0.6, 0.32, 1.6]
}
/**
* Common transitions
*
* @see https://easings.net
*/
export declare const TransitionPresets: Record<
keyof typeof _TransitionPresets,
CubicBezierPoints
> & {
linear: EasingFunction
}
/**
* Transition from one value to another.
*
* @param source
* @param from
* @param to
* @param options
*/
export declare function executeTransition<T extends number | number[]>(
source: Ref<T>,
from: MaybeRefOrGetter<T>,
to: MaybeRefOrGetter<T>,
options?: TransitionOptions,
): PromiseLike<void>
export declare function useTransition(
source: MaybeRefOrGetter<number>,
options?: UseTransitionOptions,
): ComputedRef<number>
export declare function useTransition<T extends MaybeRefOrGetter<number>[]>(
source: [...T],
options?: UseTransitionOptions,
): ComputedRef<{
[K in keyof T]: number
}>
export declare function useTransition<T extends MaybeRefOrGetter<number[]>>(
source: T,
options?: UseTransitionOptions,
): ComputedRef<number[]>
源代码
贡献者
Anthony Fu
Scott Bedard
Anthony Fu
zhiyuanzmj
Alexey Istomin
huodoushigemi
Jelf
wheat
Alex Kozack
更改日志
v10.1.0
于 2023年4月22日v10.0.0-beta.5
于 2023年4月13日cb644
- 重构!: 删除 isFunction
和 isString
工具函数v10.0.0-beta.4
于 2023年4月13日
4d7577
- feat(types)!: 将MaybeComputedRef
重命名为MaybeRefOrGetter
0a72ba
- feat(toValue): 将resolveUnref
重命名为toValue
v10.0.0-beta.1
于 2023年3月23日v10.0.0-beta.0
于 2023年3月14日v9.6.0
于 2022年11月22日