svelte/transition
模块导出了七个函数:fade
、blur
、fly
、slide
、scale
、draw
和 crossfade
。它们用于 Svelte 的 transitions
。
fade
function fade(
node: Element,
{ delay, duration, easing }?: FadeParams | undefined
): TransitionConfig;
transition:fade={params}
in:fade={params}
out:fade={params}
对元素的透明度从 0 到当前透明度进行 in
过渡动画,以及从当前透明度到 0 进行 out
过渡动画。
fade
接受以下参数:
delay
(number
,默认为 0)— 开始之前的毫秒数duration
(number
,默认为 400)— 过渡持续的毫秒数easing
(function
,默认为linear
)— 一个 easing 函数
你可以在 过渡教程 中看到 fade
过渡的效果。
<script>
import { fade } from 'svelte/transition';
</script>
{#if condition}
<div transition:fade={{ delay: 250, duration: 300 }}>淡入淡出</div>
{/if}
blur
function blur(
node: Element,
{
delay,
duration,
easing,
amount,
opacity
}?: BlurParams | undefined
): TransitionConfig;
transition:blur={params}
in:blur={params}
out:blur={params}
随着元素透明度的变化,同时对 blur
滤镜进行动画处理。
blur
接受以下参数:
delay
(number
,默认为 0)— 开始之前的毫秒数duration
(number
,默认为 400)— 过渡持续的毫秒数easing
(function
,默认为cubicInOut
)— 一个 easing 函数opacity
(number
,默认为 0)— 淡出淡入的透明度值amount
(number | string
,默认为 5)— 模糊大小。支持 CSS 单位(例如:"4rem"
)。默认单位是px
<script>
import { blur } from 'svelte/transition';
</script>
{#if condition}
<div transition:blur={{ amount: 10 }}>淡入淡出</div>
{/if}
fly
function fly(
node: Element,
{
delay,
duration,
easing,
x,
y,
opacity
}?: FlyParams | undefined
): TransitionConfig;
transition:fly={params}
in:fly={params}
out:fly={params}
对元素的 x 和 y 位置以及透明度进行动画处理。in
过渡从提供的值(作为参数传递给元素的默认值)开始动画。out
过渡从元素的默认值动画到提供的值。
fly
接受以下参数:
delay
(number
,默认为 0)— 开始之前的毫秒数duration
(number
,默认为 400)— 过渡持续的毫秒数easing
(function
,默认为cubicOut
)— 一个 easing 函数x
(number | string
,默认为 0)— x 偏移量,淡出淡入的起始值y
(number | string
,默认为 0)— y 偏移量,淡出淡入的起始值opacity
(number
,默认为 0)— 淡出淡入的透明度值
x 和 y 默认使用 px
,但支持 CSS 单位,例如 x: '100vw'
或 y: '50%'
。你可以在 过渡教程 中看到 fly
过渡的效果。
<script>
import { fly } from 'svelte/transition';
import { quintOut } from 'svelte/easing';
</script>
{#if condition}
<div
transition:fly={{ delay: 250, duration: 300, x: 100, y: 500, opacity: 0.5, easing: quintOut }}
>
飞入飞出
</div>
{/if}
slide
function slide(
node: Element,
{
delay,
duration,
easing,
axis
}?: SlideParams | undefined
): TransitionConfig;
transition:slide={params}
in:slide={params}
out:slide={params}
滑动元素进入和退出。
slide
接受以下参数:
delay
(number
,默认为 0)— 开始之前的毫秒数duration
(number
,默认为 400)— 过渡持续的毫秒数easing
(function
,默认为cubicOut
)— 一个 easing 函数axis
(x
|y
,默认为y
)— 过渡发生的运动轴
<script>
import { slide } from 'svelte/transition';
import { quintOut } from 'svelte/easing';
</script>
{#if condition}
<div transition:slide={{ delay: 250, duration: 300, easing: quintOut, axis: 'x' }}>
水平滑动进入和退出
</div>
{/if}
scale
function scale(
node: Element,
{
delay,
duration,
easing,
start,
opacity
}?: ScaleParams | undefined
): TransitionConfig;
transition:scale={params}
in:scale={params}
out:scale={params}
对元素的透明度和缩放进行动画处理。in
过渡从元素的当前(默认)值动画到作为参数传递的值。out
过渡从提供的值动画到元素的默认值。
scale
接受以下参数:
delay
(number
,默认为 0)— 开始之前的毫秒数duration
(number
,默认为 400)— 过渡持续的毫秒数easing
(function
,默认为cubicOut
)— 一个 easing 函数start
(number
,默认为 0)— 淡出淡入的缩放起始值opacity
(number
,默认为 0)— 淡出淡入的透明度值
<script>
import { scale } from 'svelte/transition';
import { quintOut } from 'svelte/easing';
</script>
{#if condition}
<div transition:scale={{ duration: 500, delay: 500, opacity: 0.5, start: 0.5, easing: quintOut }}>
缩放进入和退出
</div>
{/if}
draw
function draw(
node: SVGElement & {
getTotalLength(): number;
},
{
delay,
speed,
duration,
easing
}?: DrawParams | undefined
): TransitionConfig;
transition:draw={params}
in:draw={params}
out:draw={params}
像管子里的蛇一样,对 SVG 元素的笔画进行动画处理。in
过渡以路径不可见开始,并随着时间的推移在屏幕上绘制路径。out
过渡从可见状态开始,逐渐擦除路径。draw
仅适用于具有 getTotalLength
方法的元素,如 <path>
和 <polyline>
。
draw
接受以下参数:
delay
(number
,默认为 0)— 开始之前的毫秒数speed
(number
,默认为 undefined)— 动画的速度,见下文。duration
(number
|function
,默认为 800)— 过渡持续的毫秒数easing
(function
,默认为cubicInOut
)— 一个 easing 函数
speed
参数是设置相对于路径长度的过渡持续时间的一种方式。它是一个应用于路径长度的修饰符:duration = length / speed
。一个长度为 1000 像素的路径,速度为 1,将有 1000ms
的持续时间,将速度设置为 0.5
将使持续时间翻倍,设置为 2
将减半。
<script>
import { draw } from 'svelte/transition';
import { quintOut } from 'svelte/easing';
</script>
<svg viewBox="0 0 5 5" xmlns="http://www.w3.org/2000/svg">
{#if condition}
<path
transition:draw={{ duration: 5000, delay: 500, easing: quintOut }}
d="M2 1 h1 v1 h1 v1 h-1 v1 h-1 v-1 h-1 v-1 h1 z"
fill="none"
stroke="cornflowerblue"
stroke-width="0.1px"
stroke-linejoin="round"
/>
{/if}
</svg>
crossfade
function crossfade({
fallback,
...defaults
}: CrossfadeParams & {
fallback?:
| ((node: Element, params: CrossfadeParams, intro: boolean) => TransitionConfig)
| undefined;
}): [
(node: any, params: CrossfadeParams & { key: any }) => () => TransitionConfig,
(node: any, params: CrossfadeParams & { key: any }) => () => TransitionConfig
];
crossfade
函数创建了一对名为 send
和 receive
的 transitions。当一个元素被 ‘send’ 时,它会寻找一个对应的正在 ‘receive’ 的元素,并生成一个过渡,将元素转换为它对应元素的位置并淡出。当一个元素正在 ‘receive’ 时,会发生相反的情况。如果没有对应的元素,将使用 fallback
过渡。
crossfade
接受以下参数:
delay
(number
,默认为 0)— 开始之前的毫秒数duration
(number
|function
,默认为 800)— 过渡持续的毫秒数easing
(function
,默认为cubicOut
)— 一个 easing 函数fallback
(function
)— 当发送时没有匹配的元素正在接收,以及接收时没有元素正在发送时使用的回退 transition。
<script>
import { crossfade } from 'svelte/transition';
import { quintOut } from 'svelte/easing';
const [send, receive] = crossfade({
duration: 1500,
easing: quintOut
});
</script>
{#if condition}
<h1 in:send={{ key }} out:receive={{ key }}>BIG ELEM</h1>
{:else}
<small in:send={{ key }} out:receive={{ key }}>small elem</small>
{/if}
类型
BlurParams
interface BlurParams {…}
delay?: number;
duration?: number;
easing?: EasingFunction;
amount?: number | string;
opacity?: number;
CrossfadeParams
interface CrossfadeParams {…}
delay?: number;
duration?: number | ((len: number) => number);
easing?: EasingFunction;
DrawParams
interface DrawParams {…}
delay?: number;
speed?: number;
duration?: number | ((len: number) => number);
easing?: EasingFunction;
EasingFunction
type EasingFunction = (t: number) => number;
FadeParams
interface FadeParams {…}
delay?: number;
duration?: number;
easing?: EasingFunction;
FlyParams
interface FlyParams {…}
delay?: number;
duration?: number;
easing?: EasingFunction;
x?: number | string;
y?: number | string;
opacity?: number;
ScaleParams
interface ScaleParams {…}
delay?: number;
duration?: number;
easing?: EasingFunction;
start?: number;
opacity?: number;
SlideParams
interface SlideParams {…}
delay?: number;
duration?: number;
easing?: EasingFunction;
axis?: 'x' | 'y';
TransitionConfig
interface TransitionConfig {…}
delay?: number;
duration?: number;
easing?: EasingFunction;
css?: (t: number, u: number) => string;
tick?: (t: number, u: number) => void;