From bce557cc2dc767628bed6aac87301a1be7c5431b Mon Sep 17 00:00:00 2001 From: rxliuli Date: Tue, 4 Nov 2025 05:03:50 +0800 Subject: init commit --- src/utils/transition.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/utils/transition.ts (limited to 'src/utils/transition.ts') diff --git a/src/utils/transition.ts b/src/utils/transition.ts new file mode 100644 index 0000000..e89b038 --- /dev/null +++ b/src/utils/transition.ts @@ -0,0 +1,45 @@ +import { cubicOut } from 'svelte/easing'; +import type { EasingFunction, TransitionConfig } from 'svelte/transition'; + +interface FlyAndBlurParams { + // Time (ms) before the animation starts. + delay?: number; + // Total animation time (ms). + duration?: number; + // Easing function (defaults to cubicOut). + easing?: EasingFunction; + // Horizontal offset in pixels at start (like `fly`). + x?: number; + // Vertical offset in pixels at start (like `fly`). + y?: number; + // Initial blur radius in pixels. + blur?: number; +} + +export function flyAndBlur( + node: Element, + { + delay = 0, + duration = 420, + easing = cubicOut, + x = 0, + y = 0, + blur = 3, + }: FlyAndBlurParams = {}, +): TransitionConfig { + const style = getComputedStyle(node); + const initialOpacity = +style.opacity; + + return { + delay, + duration, + easing, + css: (t: number, u: number) => { + return ` + transform: translate(${x * u}px, ${y * u}px); + opacity: ${initialOpacity * t}; + filter: blur(${blur * u}px); + `; + }, + }; +} -- cgit v1.2.3