harmonize on a single getWindowScroll (#1054)
* Fix issue where only indication I could see in any attribute that the document was scrolling was on `window.pageYOffset`, so we hadn't been able to replay scrolling * Apply formatting changes * Update observer.ts help you fix typescript error * Update utils.ts help you fix typescript error Co-authored-by: eoghanmurray <eoghanmurray@users.noreply.github.com> Co-authored-by: Yun Feng <yun.feng0817@gmail.com>
This commit is contained in:
@@ -9,6 +9,7 @@ import {
|
||||
on,
|
||||
getWindowWidth,
|
||||
getWindowHeight,
|
||||
getWindowScroll,
|
||||
polyfill,
|
||||
hasShadowRoot,
|
||||
isSerializedIframe,
|
||||
@@ -379,22 +380,7 @@ function record<T = eventWithTime>(
|
||||
type: EventType.FullSnapshot,
|
||||
data: {
|
||||
node,
|
||||
initialOffset: {
|
||||
left:
|
||||
window.pageXOffset !== undefined
|
||||
? window.pageXOffset
|
||||
: document?.documentElement.scrollLeft ||
|
||||
document?.body?.parentElement?.scrollLeft ||
|
||||
document?.body?.scrollLeft ||
|
||||
0,
|
||||
top:
|
||||
window.pageYOffset !== undefined
|
||||
? window.pageYOffset
|
||||
: document?.documentElement.scrollTop ||
|
||||
document?.body?.parentElement?.scrollTop ||
|
||||
document?.body?.scrollTop ||
|
||||
0,
|
||||
},
|
||||
initialOffset: getWindowScroll(window),
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
throttle,
|
||||
on,
|
||||
hookSetter,
|
||||
getWindowScroll,
|
||||
getWindowHeight,
|
||||
getWindowWidth,
|
||||
isBlocked,
|
||||
@@ -279,12 +280,12 @@ export function initScrollObserver({
|
||||
return;
|
||||
}
|
||||
const id = mirror.getId(target as Node);
|
||||
if (target === doc) {
|
||||
const scrollEl = (doc.scrollingElement || doc.documentElement)!;
|
||||
if (target === doc && doc.defaultView) {
|
||||
const scrollLeftTop = getWindowScroll(doc.defaultView);
|
||||
scrollCb({
|
||||
id,
|
||||
x: scrollEl.scrollLeft,
|
||||
y: scrollEl.scrollTop,
|
||||
x: scrollLeftTop.left,
|
||||
y: scrollLeftTop.top,
|
||||
});
|
||||
} else {
|
||||
scrollCb({
|
||||
|
||||
@@ -167,6 +167,28 @@ export function patch(
|
||||
}
|
||||
}
|
||||
|
||||
export function getWindowScroll(win: Window) {
|
||||
const doc = win.document;
|
||||
return {
|
||||
left: doc.scrollingElement
|
||||
? doc.scrollingElement.scrollLeft
|
||||
: win.pageXOffset !== undefined
|
||||
? win.pageXOffset
|
||||
: doc?.documentElement.scrollLeft ||
|
||||
doc?.body?.parentElement?.scrollLeft ||
|
||||
doc?.body?.scrollLeft ||
|
||||
0,
|
||||
top: doc.scrollingElement
|
||||
? doc.scrollingElement.scrollTop
|
||||
: win.pageYOffset !== undefined
|
||||
? win.pageYOffset
|
||||
: doc?.documentElement.scrollTop ||
|
||||
doc?.body?.parentElement?.scrollTop ||
|
||||
doc?.body?.scrollTop ||
|
||||
0,
|
||||
};
|
||||
}
|
||||
|
||||
export function getWindowHeight(): number {
|
||||
return (
|
||||
window.innerHeight ||
|
||||
|
||||
Reference in New Issue
Block a user