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}<divtransition: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}<pathtransition: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;
