framer-motion
Version:
A simple and powerful React animation library
29 lines (26 loc) • 949 B
JavaScript
import { motionValue } from '../index.mjs';
function createScrollMotionValues() {
return {
scrollX: motionValue(0),
scrollY: motionValue(0),
scrollXProgress: motionValue(0),
scrollYProgress: motionValue(0),
};
}
function setProgress(offset, maxOffset, value) {
value.set(!offset || !maxOffset ? 0 : offset / maxOffset);
}
function createScrollUpdater(values, getOffsets) {
var update = function () {
var _a = getOffsets(), xOffset = _a.xOffset, yOffset = _a.yOffset, xMaxOffset = _a.xMaxOffset, yMaxOffset = _a.yMaxOffset;
// Set absolute positions
values.scrollX.set(xOffset);
values.scrollY.set(yOffset);
// Set 0-1 progress
setProgress(xOffset, xMaxOffset, values.scrollXProgress);
setProgress(yOffset, yMaxOffset, values.scrollYProgress);
};
update();
return update;
}
export { createScrollMotionValues, createScrollUpdater };