2018-01-24 01:25:56 +00:00
|
|
|
// Get the bounding client rect from an IntersectionObserver entry.
|
|
|
|
// This is to work around a bug in Chrome: https://crbug.com/737228
|
|
|
|
|
2018-02-09 06:29:29 +00:00
|
|
|
let hasBoundingRectBug
|
2018-01-24 01:25:56 +00:00
|
|
|
|
2018-03-23 00:33:42 +00:00
|
|
|
function rectsAreEqual (rectA, rectB) {
|
|
|
|
return rectA.height === rectB.height &&
|
|
|
|
rectA.top === rectB.top &&
|
|
|
|
rectA.width === rectB.width &&
|
|
|
|
rectA.bottom === rectB.bottom &&
|
|
|
|
rectA.left === rectB.left &&
|
|
|
|
rectA.right === rectB.right
|
|
|
|
}
|
|
|
|
|
2018-02-09 06:29:29 +00:00
|
|
|
export function getRectFromEntry (entry) {
|
2018-01-24 01:25:56 +00:00
|
|
|
if (typeof hasBoundingRectBug !== 'boolean') {
|
2018-02-09 06:29:29 +00:00
|
|
|
const boundingRect = entry.target.getBoundingClientRect()
|
|
|
|
const observerRect = entry.boundingClientRect
|
2018-03-23 00:33:42 +00:00
|
|
|
hasBoundingRectBug = !rectsAreEqual(boundingRect, observerRect)
|
2018-01-24 01:25:56 +00:00
|
|
|
}
|
2018-02-09 06:29:29 +00:00
|
|
|
return hasBoundingRectBug ? entry.target.getBoundingClientRect() : entry.boundingClientRect
|
|
|
|
}
|