offset_finder.service.js (1221B)
- export const findOffset = (child, parent, { top = 0, left = 0 } = {}, ignorePadding = true) => {
- const result = {
- top: top + child.offsetTop,
- left: left + child.offsetLeft
- }
- if (!ignorePadding && child !== window) {
- const { topPadding, leftPadding } = findPadding(child)
- result.top += ignorePadding ? 0 : topPadding
- result.left += ignorePadding ? 0 : leftPadding
- }
- if (child.offsetParent && window.getComputedStyle(child.offsetParent).position !== 'sticky' && (parent === window || parent.contains(child.offsetParent) || parent === child.offsetParent)) {
- return findOffset(child.offsetParent, parent, result, false)
- } else {
- if (parent !== window) {
- const { topPadding, leftPadding } = findPadding(parent)
- result.top += topPadding
- result.left += leftPadding
- }
- return result
- }
- }
- const findPadding = (el) => {
- const topPaddingStr = window.getComputedStyle(el)['padding-top']
- const topPadding = Number(topPaddingStr.substring(0, topPaddingStr.length - 2))
- const leftPaddingStr = window.getComputedStyle(el)['padding-left']
- const leftPadding = Number(leftPaddingStr.substring(0, leftPaddingStr.length - 2))
- return { topPadding, leftPadding }
- }