上毛印刷株式会社

【JavaScript】見出しの目次を自動生成、見出しの範囲になったら目次がアクティブになる便利ライブラリ「Tocbot」

【JavaScript】見出しの目次を自動生成、見出しの範囲になったら目次がアクティブになる便利ライブラリ「Tocbot」

2025年08月18日
WEBサイト制作
  • #HTML
  • #css
  • #JavaScript
  • #tips

こんにちは!
上毛印刷WEB制作担当のソーヤです。

皆様、ブログを作成する際、
その記事の目次(Table of Contents)は作成していますでしょうか。

正直いちいち見出しに合わせたリンクやインデントとかも面倒ですよね・・・

でも、今回ご紹介する「Tocbot」を使えば、
自動的に目次(Table of Contents)を作成してくれるし、
今、どこの見出しにいるのかも一目瞭然です。

実装例が少し特殊なので、デモページを作成しました。
アクセスしてみてください。
デモページはこちら(別タブで開きます)

HTML例

まず下記CDNを<script>の直前に記述してください。

<script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.32.2/tocbot.min.js"></script>

そうしたらは下記、本体を記述してください。

<div class="toc js-toc"></div>
<div class="content js-toc-content">
  <section>
    <h1 id="sec1">見出し1</h1>
    <p>ここに本文が入ります。</p>
    <h2 id="sec1-1">見出し1-1</h2>
    <p>たくさんのテキスト...</p>
    <h3 id="sec1-1-1">見出し1-1-1</h3>
    <p>たくさんのテキスト...</p>
  </section>
  <section>
    <h1 id="sec2">見出し2</h1>
    <p>ここに本文が入ります。</p>
    <h2 id="sec2-1">見出し2-1</h2>
    <p>たくさんのテキスト...</p>
  </section>
  <section>
    <h1 id="sec3">見出し3</h1>
    <p>ここに本文が入ります。</p>
    <h2 id="sec3-1">見出し3-1</h2>
    <p>たくさんのテキスト...</p>
  </section>
</div>

CSS例

.toc {
  position: fixed;
  top: 20px;
  left: 20px;
  width: 150px;
  padding: 10px;
  border: 1px solid #ddd;
  background: #fff;
  max-height: 90vh;
  overflow-y: auto;
}
.toc .is-active-link {
  font-size: 1.2em;
  font-weight: bold;
  color: #e60033;
  transition: all 0.2s ease;
}
.content {
  margin-left: 250px;
  max-width: 700px;
}
section {
  margin-bottom: 100vh;
}
.toc ol{
  padding: 0 0 0 10px;
}
.toc li{
  list-style: none;
}

JavaScript例

tocbot.init({
  tocSelector: '.js-toc',
  contentSelector: '.js-toc-content',
  headingSelector: 'h1, h2, h3',
  scrollSmooth: true
});

まとめ

今回もjQueryではなく、Vanilla.jsで実装してみました。

コピペしてガンガン使ってください!

WEB制作担当ソーヤ

ソーヤ

上毛印刷WEB制作担当
東証プライム企業の本社WEB受託チームにてフロントエンドエンジニアの経験あり。


この記事に対するご意見・ご感想・ご質問等ありましたら、
ぜひ下記フォームにてお送りください。

    お名前必須
    メールアドレス必須
    お問い合わせ内容必須
    PAGE TOP