mirror of
https://github.com/saicaca/fuwari.git
synced 2026-01-11 23:02:53 +01:00
fix: resolve katex-display scrollbar issues (#326)
Some checks failed
Code quality / quality (push) Failing after 3s
Build and Check / Astro Check for Node.js 22 (push) Failing after 4s
Build and Check / Astro Check for Node.js 23 (push) Failing after 4s
Build and Check / Astro Build for Node.js 22 (push) Failing after 4s
Build and Check / Astro Build for Node.js 23 (push) Failing after 4s
Some checks failed
Code quality / quality (push) Failing after 3s
Build and Check / Astro Check for Node.js 22 (push) Failing after 4s
Build and Check / Astro Check for Node.js 23 (push) Failing after 4s
Build and Check / Astro Build for Node.js 22 (push) Failing after 4s
Build and Check / Astro Build for Node.js 23 (push) Failing after 4s
* fix: resolve katex-display scrollbar issues * style: add katex display container styles for better responsiveness * fix: enhance katex display handling with scrollable containers and intersection observer --------- Co-authored-by: L4Ph <4ranci0ne@gmail.com>
This commit is contained in:
@@ -316,13 +316,49 @@ function initCustomScrollbar() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const katexElements = document.querySelectorAll('.katex-display') as NodeListOf<HTMLElement>;
|
const katexElements = document.querySelectorAll('.katex-display') as NodeListOf<HTMLElement>;
|
||||||
katexElements.forEach((ele) => {
|
|
||||||
OverlayScrollbars(ele, {
|
const katexObserverOptions = {
|
||||||
|
root: null,
|
||||||
|
rootMargin: '100px',
|
||||||
|
threshold: 0.1
|
||||||
|
};
|
||||||
|
|
||||||
|
const processKatexElement = (element: HTMLElement) => {
|
||||||
|
if (!element.parentNode) return;
|
||||||
|
if (element.hasAttribute('data-scrollbar-initialized')) return;
|
||||||
|
|
||||||
|
const container = document.createElement('div');
|
||||||
|
container.className = 'katex-display-container';
|
||||||
|
container.setAttribute('aria-label', 'scrollable container for formulas');
|
||||||
|
|
||||||
|
element.parentNode.insertBefore(container, element);
|
||||||
|
container.appendChild(element);
|
||||||
|
|
||||||
|
OverlayScrollbars(container, {
|
||||||
scrollbars: {
|
scrollbars: {
|
||||||
theme: 'scrollbar-base scrollbar-auto py-1',
|
theme: 'scrollbar-base scrollbar-auto',
|
||||||
|
autoHide: 'leave',
|
||||||
|
autoHideDelay: 500,
|
||||||
|
autoHideSuspend: false
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
element.setAttribute('data-scrollbar-initialized', 'true');
|
||||||
|
};
|
||||||
|
|
||||||
|
const katexObserver = new IntersectionObserver((entries, observer) => {
|
||||||
|
entries.forEach(entry => {
|
||||||
|
if (entry.isIntersecting) {
|
||||||
|
processKatexElement(entry.target as HTMLElement);
|
||||||
|
observer.unobserve(entry.target);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, katexObserverOptions);
|
||||||
|
|
||||||
|
katexElements.forEach(element => {
|
||||||
|
katexObserver.observe(element);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -91,4 +91,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.katex-display-container {
|
||||||
|
max-width: 100%;
|
||||||
|
overflow-x: auto;
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user