mirror of
https://github.com/d3/d3.git
synced 2025-12-08 19:46:24 +00:00
35 lines
782 B
JavaScript
35 lines
782 B
JavaScript
// TODO Consolidate with PlotRender.
|
|
export default function deferRender(node, render) {
|
|
let observer;
|
|
let idling;
|
|
|
|
function disconnect() {
|
|
if (observer) observer.disconnect();
|
|
if (idling) idling = void cancelIdleCallback(idling);
|
|
}
|
|
|
|
const rect = node.getBoundingClientRect();
|
|
if (rect.bottom > 0 && rect.top < window.innerHeight) {
|
|
render();
|
|
} else {
|
|
observer = new IntersectionObserver(
|
|
([entry]) => {
|
|
if (entry.isIntersecting) {
|
|
disconnect();
|
|
render();
|
|
}
|
|
},
|
|
{rootMargin: "100px"}
|
|
);
|
|
observer.observe(node);
|
|
if (typeof requestIdleCallback === "function") {
|
|
idling = requestIdleCallback(() => {
|
|
disconnect();
|
|
render();
|
|
});
|
|
}
|
|
}
|
|
|
|
return disconnect;
|
|
}
|