{"version":3,"file":"getRelativePosition.mjs","sources":["../../../src/guide/utils/getRelativePosition.ts"],"sourcesContent":["import { getElmCssPropValue, isFixed, getWindowScroll } from '../../utils/dom';\n\n/**\n * 获取元素相对于另一个元素的位置（或者说相对于 body）\n * 感谢 `meouw`: http://stackoverflow.com/a/442474/375966\n */\nexport default function getRelativePosition(elm: HTMLElement, relativeElm: HTMLElement = document.body) {\n  const { scrollTop, scrollLeft } = getWindowScroll();\n  const { top: elmTop, left: elmLeft } = elm.getBoundingClientRect();\n  const { top: relElmTop, left: relElmLeft } = relativeElm.getBoundingClientRect();\n  const relativeElmPosition = getElmCssPropValue(relativeElm, 'position');\n\n  if (\n    (relativeElm.tagName.toLowerCase() !== 'body' && relativeElmPosition === 'relative') ||\n    relativeElmPosition === 'sticky'\n  ) {\n    return {\n      top: elmTop - relElmTop,\n      left: elmLeft - relElmLeft,\n    };\n  }\n\n  if (isFixed(elm)) {\n    return {\n      top: elmTop,\n      left: elmLeft,\n    };\n  }\n\n  return {\n    top: elmTop + scrollTop,\n    left: elmLeft + scrollLeft,\n  };\n}\n"],"names":["top","left"],"mappings":";;;;;;;;;;;;;;;;;;AAMA,SAAA,mBAAA,CAAA,GAAA,EAAA;AAAwG,EAAA,IAAA,WAAA,GAAA,SAAA,CAAA,MAAA,GAAA,CAAA,IAAA,SAAA,CAAA,CAAA,CAAA,KAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CAAA,GAAA,QAAA,CAAA,IAAA,CAAA;AACtG,EAAA,IAAA,gBAAA,GAAA,eAAA,EAAA;;;AACA,EAAA,IAAA,qBAAA,GAAA,GAAA,CAAA,qBAAA,EAAA;;;AACA,EAAA,IAAA,qBAAA,GAAA,WAAA,CAAA,qBAAA,EAAA;;;AACM,EAAA,IAAA,mBAAA,GAAA,kBAAA,CAAA,WAAA,EAAA,UAAA,CAAA,CAAA;AAGH,EAAA,IAAA,WAAA,CAAA,OAAA,CAAA,WAAA,EAAA,KAAA,MAAA,IAAA,mBAAA,KAAA,UAAA,IAAA,mBAAA,KAAA,QAAA,EAAA;;;;;AAOH,GAAA;AAEI,EAAA,IAAA,OAAA,CAAA,GAAA,CAAA,EAAA;;AAEAA,MAAAA,GAAAA,EAAAA,MAAAA;AACAC,MAAAA,IAAAA,EAAAA,OAAAA;;AAEJ,GAAA;;;;;AAMF;;;;"}