mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-29 17:18:43 +08:00
61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
import { onDestroy } from "./skeleton/index.js";
|
|
|
|
export function transition($node, opts = {}) {
|
|
const {
|
|
timeEnter = 250, enter = slideXIn(5),
|
|
timeLeave = 100, leave = opacityOut()
|
|
} = opts;
|
|
animate($node, { time: timeEnter, keyframes: enter });
|
|
onDestroy(async() => await animate($node, { time: timeLeave, keyframes: leave }));
|
|
return $node;
|
|
}
|
|
|
|
export function animate($node, opts = {}) {
|
|
const { time = 250, keyframes = opacityIn() } = opts;
|
|
|
|
if (!$node) return Promise.resolve();
|
|
else if (typeof $node.animate !== "function") return Promise.resolve();
|
|
|
|
return new Promise((done) => {
|
|
$node.animate(keyframes, {
|
|
duration: time,
|
|
fill: "forwards"
|
|
}).onfinish = done;
|
|
});
|
|
}
|
|
|
|
export const slideXIn = (dist) => ([
|
|
{ transform: `translateX(${dist}px)`, opacity: 0 },
|
|
{ transform: "translateX(0)", opacity: 1 }
|
|
]);
|
|
|
|
export const slideXOut = (size) => ([
|
|
{ opacity: 1, transform: "translateX(0)" },
|
|
{ opacity: 0, transform: `translateX(${size}px)` }
|
|
]);
|
|
|
|
export const opacityIn = () => ([
|
|
{ opacity: 0 },
|
|
{ opacity: 1 }
|
|
]);
|
|
|
|
export const opacityOut = () => ([
|
|
{ opacity: 1 },
|
|
{ opacity: 0 }
|
|
]);
|
|
|
|
export const slideYIn = (size) => ([
|
|
{ opacity: 0, transform: `translateY(${size}px)` },
|
|
{ opacity: 1, transform: "translateY(0)" }
|
|
]);
|
|
|
|
export const slideYOut = (size) => ([
|
|
{ opacity: 1, transform: "translateY(0px)" },
|
|
{ opacity: 0, transform: `translateY(${size}px)` }
|
|
]);
|
|
|
|
export const zoomIn = (size) => ([
|
|
{ opacity: 0, transform: `scale(${size})` },
|
|
{ opacity: 1, transform: "scale(1)" }
|
|
]);
|