<div id='container'>
<div id="tree">
xxxxxxxxxxxxxxx
</div>
<div id="html_toc">
<h1 class="hh1 t01">前言</h1>
<h2 class='t02'>第一张,第一段</h2>
<h2 class='t02'>第一张,第二段</h2>
<div>
<h2 class='t02'>第一张,第三段</h2>
<h2 class='t02'>第一张,第四段</h2>
<h4 class="t04">解决方案</h4>
<pre>
const t = new HtmlToc({ root: "#html_toc" })
console.log(t.getTreeData())
console.log(t.createPlatData())
生成平级或者树形数据结构,
根据这个结构套用对应的树组件 然后给树组件的节点添加点击时间
此插件生成的树结构每一个节点都包含了节点 html 元素
可以在点击事件中获取到
调用
node.scrollIntoView({
behavior: 'smooth'
})
即可实现滚动
</pre>
</div>
<h1 class="t01">后续</h1>
<h2 class='t02'>第二章,第一段</h2>
<h2 class='t02'>第二章,第二段</h2>
<h1 class="t01">尾声</h1>
<h2 class='t02'>第三章,第一段</h2>
<h2 class='t02'>第三章,第二段</h2>
<h3 class="t03" id='last'>第三章,第二段,第一节</h3>
<h1 class="t01">后续</h1>
<h2 class='t02'>第二章,第一段</h2>
<h2 class='t02'>第二章,第二段</h2>
<h1 class="t01">尾声</h1>
<h2 class='t02'>第三章,第一段</h2>
<h3 class="t03" id='last'>第三章,第二段,第一节</h3>
<h2 class='t02'>第三章,第二段</h2>
</div>
</div>
html,body{height:100%; overflow:hidden;}
#container{
height:100%;
display:flex;
overflow:hidden;
}
#tree{
width:150px;
padding:10px;
background-color:#eee;
}
#html_toc{
flex:1;
height:100%;
overflow:auto;
padding:10px;
}
.html_toc_node {
cursor: pointer;
font-size: 14px;
user-select: none;
}
.html_toc_node[active] {
color: green;
}
.html_toc_node_level_0 {
padding-left: 20px;
}
.html_toc_node_level_1 {
padding-left: 40px;
}
.html_toc_node_level_2 {
padding-left: 60px;
}
.html_toc_node_level_3 {
padding-left: 80px;
}
.html_toc_node_level_4 {
padding-left: 100px;
}
import HtmlToc from 'https://cdn.skypack.dev/t_html_toc@0.0.10';
const t = new HtmlToc("#html_toc", {
nodeToTitle(node) {
return node.innerText
}
})
t.mountToc('#tree', {
scrollParams: {
behavior: "smooth",
block:"center"
}
})
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.