<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"
      }
    })

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.