UNPKG

framer-motion

Version:

A simple and powerful JavaScript animation library

49 lines (46 loc) 1.86 kB
import { warnOnce } from '../../../utils/warn-once.mjs'; import { updateScrollInfo } from './info.mjs'; import { resolveOffsets } from './offsets/index.mjs'; function measure(container, target = container, info) { /** * Find inset of target within scrollable container */ info.x.targetOffset = 0; info.y.targetOffset = 0; if (target !== container) { let node = target; while (node && node !== container) { info.x.targetOffset += node.offsetLeft; info.y.targetOffset += node.offsetTop; node = node.offsetParent; } } info.x.targetLength = target === container ? target.scrollWidth : target.clientWidth; info.y.targetLength = target === container ? target.scrollHeight : target.clientHeight; info.x.containerLength = container.clientWidth; info.y.containerLength = container.clientHeight; /** * In development mode ensure scroll containers aren't position: static as this makes * it difficult to measure their relative positions. */ if (process.env.NODE_ENV !== "production") { if (container && target && target !== container) { warnOnce(getComputedStyle(container).position !== "static", "Please ensure that the container has a non-static position, like 'relative', 'fixed', or 'absolute' to ensure scroll offset is calculated correctly."); } } } function createOnScrollHandler(element, onScroll, info, options = {}) { return { measure: () => measure(element, options.target, info), update: (time) => { updateScrollInfo(element, info, time); if (options.offset || options.target) { resolveOffsets(element, info, options); } }, notify: () => onScroll(info), }; } export { createOnScrollHandler };