align id map by skip extra added nodes
This commit is contained in:
@@ -39,7 +39,10 @@ function record(options: recordOptions = {}) {
|
|||||||
emit(
|
emit(
|
||||||
wrapEvent({
|
wrapEvent({
|
||||||
type: EventType.Load,
|
type: EventType.Load,
|
||||||
data: { width: getWindowWidth(), height: getWindowHeight() },
|
data: {
|
||||||
|
width: getWindowWidth(),
|
||||||
|
height: getWindowHeight(),
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
const [node, idNodeMap] = snapshot(document);
|
const [node, idNodeMap] = snapshot(document);
|
||||||
@@ -47,7 +50,18 @@ function record(options: recordOptions = {}) {
|
|||||||
return console.warn('Failed to snapshot the document');
|
return console.warn('Failed to snapshot the document');
|
||||||
}
|
}
|
||||||
mirror.map = idNodeMap;
|
mirror.map = idNodeMap;
|
||||||
emit(wrapEvent({ type: EventType.FullSnapshot, data: { node } }));
|
emit(
|
||||||
|
wrapEvent({
|
||||||
|
type: EventType.FullSnapshot,
|
||||||
|
data: {
|
||||||
|
node,
|
||||||
|
initialOffset: {
|
||||||
|
left: document.documentElement.scrollLeft,
|
||||||
|
top: document.documentElement.scrollTop,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
||||||
initObservers({
|
initObservers({
|
||||||
mutationCb: m =>
|
mutationCb: m =>
|
||||||
emit(
|
emit(
|
||||||
|
|||||||
@@ -26,6 +26,10 @@ export type fullSnapshotEvent = {
|
|||||||
type: EventType.FullSnapshot;
|
type: EventType.FullSnapshot;
|
||||||
data: {
|
data: {
|
||||||
node: serializedNodeWithId;
|
node: serializedNodeWithId;
|
||||||
|
initialOffset: {
|
||||||
|
top: number;
|
||||||
|
left: number;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -199,3 +203,7 @@ export type throttleOptions = {
|
|||||||
|
|
||||||
export type listenerHandler = () => void;
|
export type listenerHandler = () => void;
|
||||||
export type hookResetter = () => void;
|
export type hookResetter = () => void;
|
||||||
|
|
||||||
|
export type playerConfig = {
|
||||||
|
speed: number;
|
||||||
|
};
|
||||||
|
|||||||
20
src/utils.ts
20
src/utils.ts
@@ -40,9 +40,20 @@ export function getIdNodeMap(doc: Document) {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (node.type === NodeType.Document || node.type === NodeType.Element) {
|
if (node.type === NodeType.Document || node.type === NodeType.Element) {
|
||||||
for (const _n of Array.from(n.childNodes)) {
|
let dataStr: string | null = null;
|
||||||
walk(_n);
|
let extraChildIndexes: number[] = [];
|
||||||
|
if (node.type === NodeType.Element) {
|
||||||
|
dataStr = (n as Element).getAttribute('data-extra-child-index');
|
||||||
}
|
}
|
||||||
|
if (dataStr) {
|
||||||
|
extraChildIndexes = JSON.parse(dataStr);
|
||||||
|
}
|
||||||
|
n.childNodes.forEach((childNode, index) => {
|
||||||
|
// skip extra DOM created when rebuild
|
||||||
|
if (extraChildIndexes.indexOf(index) < 0) {
|
||||||
|
walk(childNode);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +103,10 @@ export function hookSetter<T>(
|
|||||||
const original = Object.getOwnPropertyDescriptor(target, key);
|
const original = Object.getOwnPropertyDescriptor(target, key);
|
||||||
Object.defineProperty(target, key, {
|
Object.defineProperty(target, key, {
|
||||||
set(value) {
|
set(value) {
|
||||||
d.set!.call(this, value);
|
// put hooked setter into event loop to avoid of set latency
|
||||||
|
setTimeout(() => {
|
||||||
|
d.set!.call(this, value);
|
||||||
|
}, 0);
|
||||||
if (original && original.set) {
|
if (original && original.set) {
|
||||||
original.set.call(this, value);
|
original.set.call(this, value);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user