代码折叠

This commit is contained in:
lyf 2024-08-09 14:55:25 +08:00
parent 44787637f2
commit 8f759d1c3e
2 changed files with 56 additions and 37 deletions

View File

@ -127,23 +127,25 @@ export function PreCode(props: { children: any }) {
useEffect(() => { useEffect(() => {
if (ref.current) { if (ref.current) {
// 获取代码块的实际高度
const screenHeight = window.innerHeight;
const codeHeight = ref.current.scrollHeight; const codeHeight = ref.current.scrollHeight;
setShowToggle(codeHeight > screenHeight * 0.3); setShowToggle(codeHeight > 400);
ref.current.scrollTop = ref.current.scrollHeight;
} }
}, [props.children]); }, [props.children]);
const toggleCollapsed = () => { const toggleCollapsed = () => {
setCollapsed(!collapsed); setCollapsed(!collapsed);
}; };
console.log(props.children);
return ( return (
<> <>
<div style={{ position: "relative" }}>
<pre <pre
ref={ref} ref={ref}
style={{ maxHeight: collapsed ? "30vh" : "none", overflow: "hidden" }} style={{
maxHeight: collapsed ? "400px" : "none",
overflow: "hidden",
}}
> >
<span <span
className="copy-code-button" className="copy-code-button"
@ -156,15 +158,19 @@ export function PreCode(props: { children: any }) {
></span> ></span>
{props.children} {props.children}
{showToggle && collapsed && ( {showToggle && collapsed && (
<p <div
style={{ margin: 0 }}
className="show-hide-button" className="show-hide-button"
onClick={toggleCollapsed} style={{
backgroundImage: collapsed
? "linear-gradient(to bottom, rgba(0,0,0,.8), rgba(0,0,0,.06))"
: "none",
}}
> >
<button onClick={toggleCollapsed}></button>
</p> </div>
)} )}
</pre> </pre>
</div>
{mermaidCode.length > 0 && ( {mermaidCode.length > 0 && (
<Mermaid code={mermaidCode} key={mermaidCode} /> <Mermaid code={mermaidCode} key={mermaidCode} />
)} )}

View File

@ -271,7 +271,7 @@ div.math {
} }
pre { pre {
position: relative; // position: relative;
&:hover .copy-code-button { &:hover .copy-code-button {
pointer-events: all; pointer-events: all;
transform: translateX(0px); transform: translateX(0px);
@ -301,19 +301,32 @@ pre {
opacity: 1; opacity: 1;
} }
} }
.show-hide-button { .show-hide-button {
width: 100%;
height: 20px;
line-height: 20px;
position: absolute; position: absolute;
text-align: center; top: 0;
bottom: 0; width: 100%;
margin: auto;
height: fit-content;
display: inline-flex;
justify-content: center;
button{
margin-top: 3em;
margin-bottom: 4em;
padding: 5px 16px;
border: 0;
cursor: pointer; cursor: pointer;
border-radius: 14px;
text-align: center;
color: white; color: white;
background: linear-gradient(rgba(0,0,0,.3), #1a1b26); background: #464e4e;
} }
} }
}
.clickable { .clickable {
cursor: pointer; cursor: pointer;