-
Notifications
You must be signed in to change notification settings - Fork 1
/
dom-helpers.js
49 lines (46 loc) · 1.34 KB
/
dom-helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// TODO: can we use getBoundingClientRect instead??
// last place this is used is in "handleWheel" in ScrollElement
export function getParentPosition(element) {
var xPosition = 0
var yPosition = 0
var first = true
while (element) {
if (
!element.offsetParent &&
element.tagName === 'BODY' &&
element.scrollLeft === 0 &&
element.scrollTop === 0
) {
element = document.scrollingElement || element
}
xPosition +=
element.offsetLeft - (first ? 0 : element.scrollLeft) + element.clientLeft
yPosition +=
element.offsetTop - (first ? 0 : element.scrollTop) + element.clientTop
element = element.offsetParent
first = false
}
return { x: xPosition, y: yPosition }
}
export function getSumScroll(node) {
if (node === document.body) {
return {scrollLeft: 0, scrollTop: 0}
} else {
const parent = getSumScroll(node.parentNode)
return ({
scrollLeft: node.scrollLeft + parent.scrollLeft,
scrollTop: node.scrollTop + parent.scrollTop
})
}
}
export function getSumOffset(node) {
if (node === document.body || !node.offsetParent) {
return {offsetLeft: 0, offsetTop: 0}
} else {
const parent = getSumOffset(node.offsetParent)
return ({
offsetLeft: node.offsetLeft + parent.offsetLeft,
offsetTop: node.offsetTop + parent.offsetTop
})
}
}