@rootenginear/svelte-action-motionone
Version:
Unofficial Svelte Action for Motion One animation library
59 lines (58 loc) • 1.65 kB
JavaScript
import { scroll as motionScroll } from 'motion';
const createScroll = (node) => (params) => {
const [onScroll, options] = typeof params === 'function' ? params(node) : params;
return motionScroll(onScroll, options);
};
export const scroll = (node, params) => {
const instanceScroll = createScroll(node);
let stop = instanceScroll(params);
return {
update(params) {
stop();
stop = instanceScroll(params);
},
destroy() {
stop();
}
};
};
const createContainerScroll = (node) => (params) => {
const [onScroll, options] = typeof params === 'function' ? params(node) : params;
return motionScroll(onScroll, {
...options,
container: options?.container ?? node
});
};
export const containerScroll = (node, params) => {
const instanceScroll = createContainerScroll(node);
let stop = instanceScroll(params);
return {
update(params) {
stop();
stop = instanceScroll(params);
},
destroy() {
stop();
}
};
};
const createScrollInView = (node) => (params) => {
const [onScroll, options] = typeof params === 'function' ? params(node) : params;
return motionScroll(onScroll, {
...options,
target: options?.target ?? node
});
};
export const scrollInView = (node, params) => {
const instanceScroll = createScrollInView(node);
let stop = instanceScroll(params);
return {
update(params) {
stop();
stop = instanceScroll(params);
},
destroy() {
stop();
}
};
};