카테고리 없음

티스토리 Letter스킨 자동 목차 생성하기

AgileJung 2022. 7. 18. 16:42
728x90
반응형

벨로그와 다른 블로그를 사용했을 때, 편리했던 기능 중 하나인 자동 목차 기능을 티스토리에 적용해보자.

나는 티스토리의 Letter 스킨을 사용하고 있다.

 

Tocbot이라는 라이브러리 사용하여 자동 목차를 생성할 것이다.

 

1.  <head></head> 안에 적용하기

head부분 안에 적용해야 할 것이 2개가 있다.

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.min.js"></script>

css와 js파일을 연동시켜줘야 한다.

 

2. <body></body> 안에서 <s_permalink_article_rep> 밑에 추가하기

<div class="toc toc-fixed" ></div>

<s_permalink_article_rep> 밑에 위의 구문을 추가하자.

 

3. </body> 바로 위에 스크립트 추가하기

<script>
  let content = document.querySelector('.article_view')
  let headings = content.querySelectorAll('h1, h2, h3, h4, h5, h6, h7')
  let headingMap = {}

  Array.prototype.forEach.call(headings, function (heading) {
      let id = heading.id ? heading.id : heading.textContent.trim().toLowerCase()
                 .split(' ').join('-').replace(/[\!\@\#\$\%\^\&\*\(\):]/ig, '')
      headingMap[id] = !isNaN(headingMap[id]) ? ++headingMap[id] : 0
      if (headingMap[id]) {
        heading.id = id + '-' + headingMap[id]
      } else {
        heading.id = id
      }
    })

  tocbot.init({
    tocSelector: '.toc',
    contentSelector: '.article_view',
    headingSelector:'h1, h2, h3',
    hasInnerContainers: false
  });

  $(document).ready(function(){
    $('.toc').addClass('toc-absolute');

    let toc_top = $('.toc').offset().top;
    $(window).scroll(function() {
      if ($(this).scrollTop() >= toc_top) {
        $('.toc').addClass('toc-fixed');
        $('.toc').removeClass('toc-absolute');
      } else {
        $('.toc').addClass('toc-absolute');
        $('.toc').removeClass('toc-fixed');
      }
    });
  });
</script>
</body>

바디 태그가 끝나는 지점 바로 위에 스크립트 구문을 추가해준다.

 

4. CSS 추가하기

/*tocbot*/

.toc-absolute {
  position: absolute;
  margin-top:165px;
}
.toc-fixed {
  position: fixed;
  top: 165px;
}

.toc {
  right: calc((100% - 850px) / 2 - 300px);
  width: 250px;
  padding: 10px;
  box-sizing: border-box;
}

.toc-list {
  margin-top: 10px !important;
  font-size: 0.9em;
}

.toc > .toc-list li {
  margin-bottom: 10px;
}

.toc > .toc-list li:last-child {
  margin-bottom: 0;
}

.toc > .toc-list li a {
	text-decoration: none;
}

.toc-list-item .is-collapsed{
	    max-height: 3000px;
        } //스크롤 해야만 자동 목차가 보이는 현상 고치기

를 추가해주자.


위와 같이 진행했음에도 자동 목차가 생기지 않았다면,

아래와 같이 해보자.

 

자동 목차가 생기지 않았다면?

자바스크립트 부분

  let content = document.querySelector('.entry-content')
  
  contentSelector: '.entry-content',

</body> 바로 위에 적용하였던 자바스크립트 부분이 위처럼 되어있을 것이다.

해당 스크립트에서 .entry-content 이 부분을 .article_view 으로 수정해주자.

 


자동 목차가 중간에 끊기거나 등등의 문제가 발생한다면?

 

바로 위에 적용하였던 자바스크립트 부분에서 아래와 같은 내용을 삭제한다.

 $(window).scroll(function() {
      if ($(this).scrollTop() >= toc_top) {
        $('.toc').addClass('toc-fixed');
        $('.toc').removeClass('toc-absolute');
      } else {
        $('.toc').addClass('toc-absolute');
        $('.toc').removeClass('toc-fixed');
      }
    });

 


자동 생성을 커스텀 하고 싶다면?

처음 <head></head> 안에 추가시켰던 아래의 구문을 삭제하고 해당 css파일을 직접 입력한다.

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.css">

css 파일의 내용은 아래와 같다.

tocbot.css

.toc{overflow-y:auto}
.toc>.toc-list{overflow:hidden;position:relative}
.toc>.toc-list li{list-style:none}
.toc-list{margin:0;padding-left:10px}
a.toc-link{color:#333;height:100%}
.is-collapsible{max-height:1000px;overflow:hidden;transition:all 300ms ease-in-out}
.is-collapsed{max-height:0}
.is-position-fixed{position:fixed !important;top:0}
.is-active-link{font-weight:700}

// 활성화된 목차 색상 변경
.is-active-li a{font-weight:700; color: #4998ff;}


//활성화되지 않은 상태바 색상
.toc-link::before{background-color:#EEE;content:' ';display:inline-block;height:inherit;left:0;margin-top:-1px;position:absolute;width:2px}

//활성화된 상태바 색상
.is-active-link::before{background-color:#4998ff}

//hover했을 때, 색상 변경
.toc > .toc-list li a:hover{
color: #157ead;
}

 

내가 커스텀한 tocbot

 

제목 3은 바로 나오지 않고 상위 제목 부분의 내용을 읽어야 생성된다.

제목 3입니다.

728x90
반응형