|
|
|
@ -71,22 +71,35 @@ export function Markdown(
|
|
|
|
|
const parent = props.parentRef.current;
|
|
|
|
|
const md = mdRef.current;
|
|
|
|
|
|
|
|
|
|
if (parent && md) {
|
|
|
|
|
const parentBounds = parent.getBoundingClientRect();
|
|
|
|
|
const twoScreenHeight = Math.max(500, parentBounds.height * 2);
|
|
|
|
|
const mdBounds = md.getBoundingClientRect();
|
|
|
|
|
const isInRange = (x: number) =>
|
|
|
|
|
x <= parentBounds.bottom + twoScreenHeight &&
|
|
|
|
|
x >= parentBounds.top - twoScreenHeight;
|
|
|
|
|
inView.current = isInRange(mdBounds.top) || isInRange(mdBounds.bottom);
|
|
|
|
|
}
|
|
|
|
|
const checkInView = () => {
|
|
|
|
|
if (parent && md) {
|
|
|
|
|
const parentBounds = parent.getBoundingClientRect();
|
|
|
|
|
const twoScreenHeight = Math.max(500, parentBounds.height * 2);
|
|
|
|
|
const mdBounds = md.getBoundingClientRect();
|
|
|
|
|
const isInRange = (x: number) =>
|
|
|
|
|
x <= parentBounds.bottom + twoScreenHeight &&
|
|
|
|
|
x >= parentBounds.top - twoScreenHeight;
|
|
|
|
|
inView.current = isInRange(mdBounds.top) || isInRange(mdBounds.bottom);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (inView.current && md) {
|
|
|
|
|
renderedHeight.current = Math.max(
|
|
|
|
|
renderedHeight.current,
|
|
|
|
|
md.getBoundingClientRect().height,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
if (inView.current && md) {
|
|
|
|
|
renderedHeight.current = Math.max(
|
|
|
|
|
renderedHeight.current,
|
|
|
|
|
md.getBoundingClientRect().height,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
if (!inView.current) {
|
|
|
|
|
checkInView();
|
|
|
|
|
}
|
|
|
|
|
}, 10);
|
|
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
checkInView();
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div
|
|
|
|
|