// =============================== Motion =============================== export function getMotionName(prefixCls: string, transitionName?: string, animationName?: string) { let motionName = transitionName; if (!motionName && animationName) { motionName = `${prefixCls}-${animationName}`; } return motionName; } // ================================ UUID ================================ let uuid = -1; export function getUUID() { uuid += 1; return uuid; } // =============================== Offset =============================== function getScroll(w: Window, top?: boolean): number { let ret = w[`page${top ? 'Y' : 'X'}Offset`]; const method = `scroll${top ? 'Top' : 'Left'}`; if (typeof ret !== 'number') { const d = w.document; ret = d.documentElement[method]; if (typeof ret !== 'number') { ret = d.body[method]; } } return ret; } type CompatibleDocument = { parentWindow?: Window; } & Document; export function offset(el: Element) { const rect = el.getBoundingClientRect(); const pos = { left: rect.left, top: rect.top, }; const doc = el.ownerDocument as CompatibleDocument; const w = doc.defaultView || doc.parentWindow; pos.left += getScroll(w); pos.top += getScroll(w, true); return pos; }