ํฐ์คํ ๋ฆฌ ๋ชฉ์ฐจ ๋ค๋น๊ฒ์ดํฐ ๋ง๋ค๊ธฐ(ver_1) by LabMate
- ๋งค์ฐ ์ฝ๊ณ ๊ฐ๋จํฉ๋๋ค
- ๊ฐ ํฐ์คํ ๋ฆฌ์ ํ ๋ง์ ๋ง๊ฒ ์์ ํ ์ ์๋๋ก css์ ์ฃผ์์ ๋ฌ์๋์์ต๋๋ค
- ๋ค๋น๊ฒ์ดํฐ๋ฅผ ๋ง๋๋ ๊ธฐ์ค
- ๊ธ ์์ฑ์์ ์ ๋ชฉ1(h1), ์ ๋ชฉ2(h2), ์ ๋ชฉ3(h3) ์ด๊ฑฐ๋
- blockquote(๊ทธ ์ค์์ data-ke-style="style2"์ธ ๊ฒ) ์ ๋๋ค
- ๋ค๋น๊ฒ์ดํฐ ๊ธฐ์ค์ ๋ฐ๋ผ ๊ธ์ ์์ฑํ๋ฉด ์ข์ต๋๋ค
- ๊ฐ ๋ชฉ์ฐจ๋ณ ๋ ๋ฒจ์ ์ค์ ํ์ง ์์์ต๋๋ค. ๋ชจ๋ ๋์ผ ๋ ๋ฒจ์ ๋๋ค
- ๊ถ๊ธํ ์ ์ ๋๊ธ ๋ฌ์์ฃผ์ธ์
์ ์ฉ ๊ฒฐ๊ณผ (์ฐ์ธก ๋ค๋น๊ฒ์ดํฐ)
- ๊ธ์๋ฅผ ๋๋ฅด๋ฉด ํ์ด์ง ๋ด์์ ์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค
- ์คํฌ๋กค์ ๋ด๋ ค๋ ๋ฐ๋ผ๋ค๋๋๋ค
์ค์ ์ ํฐ์คํ ๋ฆฌ ์คํจ ์ ๋ณด
- Book club ์คํจ์ ์ ์ฉํ๊ณ ์์ต๋๋ค
- ๊ธ ํ์ด์ง์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ปฌ๋ฌ๋ ์ฝ๋ ์คํ์ผ์ ์ฝ๊ฐ ์์ ํ ์ํ์ ๋๋ค
์ ์ฉ ๋ฐฉ๋ฒ
1. ํฐ์คํ ๋ฆฌ ๊ธ ๊ด๋ฆฌ > ์คํจํธ์ง > htmlํธ์ง
2. /head ํ๊ทธ๋ฅผ ์ฐพ๊ณ ๊ทธ ์์ ์๋์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค
<style>
/*๋ณธ๋ฌธ๊ณผ ๋ค๋น๊ฒ์ด์
์ ๊ฐ์ธ๋ div*/
.parent-flex-navigator {
display: flex;
}
/*๋ชฉ์ฐจ ๋ค๋น๊ฒ์ดํฐ css*/
#tag-navigation {
flex-basis: 20%;
background-color: white;
border: solid 3px #F5F5F5; /*F5๋ ํ์, #bcdafa๋ ํ๋์ ํ์คํ
ํค*/
position: fixed;
top: 50px; /*์๋จ ๊ณ ์ ๊ฐ*/
right: 0; /*์ฐ์ธก ๊ณ ์ ๊ฐ*/
margin-right: 50px;
margin-top: 50px;
width: 180px; /*๋ค๋น๊ฒ์ดํฐ ๋๋น ๊ฐ*/
padding: 10px;
font-size: 0.8rem; /*๊ธ์ ํฌ๊ธฐ*/
z-index: 9999; /* ๋ค๋ฅธ ์์๋ณด๋ค ์์ ์ฌ๋ฆผ */
}
/*li ํ๊ทธ์ ๋๊ทธ๋ผ๋ฏธ ์์ ๊ธฐcss*/
#tag-navigation a li {
list-style-type: none;
}
</style>
3. html์์ค์์ ctrl+f๋ฅผ ๋๋ฌ์ div class="content-wrap" ๋ฅผ ์ฐพ์ต๋๋ค
- ๊ทธ ํ๊ทธ์ ๋ฐ๋ก ์ divํ๊ทธ์ class="parent-flex-navigator"๋ฅผ ์ถ๊ฐํด์ค๋๋ค
4. ์คํฌ๋กค์ ์ญ ๋ด๋ ค์ ์๋์์ /body ํ๊ทธ๋ฅผ ์ฐพ๊ณ ์๋์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค
<script>
/*
* ํด๋น ํ์ด์ง๊ฐ '๊ธ' ํ์์ผ ๋๋ง ๋ค๋น๊ฒ์ดํฐ ํ์ํ๊ธฐ
* */
// ํ์ฌ ํ์ด์ง์ URL
let currentUrl = window.location.href;
// ํฐ์คํ ๋ฆฌ ๊ธ ํ์ด์ง URL ํจํด: ์ซ์๋ง ์๋ ํจํด
let postPagePattern = /^https:\/\/labmate-dev\.tistory\.com\/\d+$/;
// ๊ธ์ผ ๊ฒฝ์ฐ์์
if (postPagePattern.test(currentUrl)) {
//๋ค๋น๊ฒ์ดํฐ div๋ง๋ค๊ธฐ
makeNaviDiv();
//ํด๋น div ์์ ๋งํฌํ๊ทธ ๋ง๋ค๊ธฐ
fillTagNavigationDiv();
//๋ค๋น๊ฒ์ดํฐ ๋ด์ฉ๋ฌผ์ด ์์ ๊ฒฝ์ฐ ์จ๊ธฐ๊ธฐ
hideNaviDiv();
} else {
//์คํจ ํธ์งํ ์ผ ์์ ๋ ์๋ ์ฃผ์ ํ๊ณ css ๋ฑ์ ๊ณ ์น์ธ์!
/* //๋ค๋น๊ฒ์ดํฐ div๋ง๋ค๊ธฐ
makeNaviDiv();
//ํด๋น div ์์ ๋งํฌํ๊ทธ ๋ง๋ค๊ธฐ
fillTagNavigationDiv();*/
}
/*
* ๋ค์ด๊ฒ์ดํฐ div ๋ง๋ค๊ธฐ
* */
function makeNaviDiv() {
// <div class="content-wrap"> ํ๊ทธ ๊ฐ์ ธ์ค๊ธฐ
let contentWrap = document.querySelector('.content-wrap');
if (contentWrap) {
// <div id="tag-navigation" class="tag-navigation"> ํ๊ทธ ์์ฑ
let tagNavigationDiv = document.createElement('div');
tagNavigationDiv.id = 'tag-navigation';
tagNavigationDiv.className = 'tag-navigation';
// <div class="content-wrap"> ํ๊ทธ์ ๋ง์ง๋ง ์์์ผ๋ก ์ถ๊ฐ
contentWrap.appendChild(tagNavigationDiv);
}
}
/*
* div ํ๊ทธ ์ฑ์ฐ๊ธฐ
* ์กฐ๊ฑด : ๋ณธ๋ฌธ์์ ์ ๋ชฉ1(h1), ์ ๋ชฉ2(h2), ์ ๋ชฉ3(h3), ์ ๋ชฉ1(h1), blockquote(๊ทธ ์ค์์ data-ke-style="style2"์ธ ๊ฒ)
* */
function fillTagNavigationDiv() {
// contents_style ํด๋์ค๋ฅผ ๊ฐ์ง div ์์ ์ ํ
let contentsDiv = document.querySelector('.contents_style');
// h1, h2, h3, blockquote ํ๊ทธ๋ค์ ์ ํ
let headingsAndBlockquotes = contentsDiv.querySelectorAll('h1, h2, h3, blockquote');
// ์ฐพ์ ํ๊ทธ๋ค ์์์๋ถํฐ ๋ฐ๋ณตํ๋ฉด์ ๋งํฌ ๋ง๋ค๊ธฐ. <a><li></li></a> ํํ๋ก ๋ง๋ค ์์
headingsAndBlockquotes.forEach(function (element, index) {
//๋งํฌ๋ค์ด ๋ค์ด๊ฐ div
let naviDivElement = document.getElementById('tag-navigation');
// ๊ฐ ์์์ ํ
์คํธ ๋ด์ฉ ๊ฐ์ ธ์ค๊ธฐ
let textContent = element.textContent.trim();
// ์์๊ฐ ๋น์ด์์ผ๋ฉด ๋งํฌ ์๋ง๋ฆ
if (textContent == "") {
return;
}
// blockquote ํ๊ทธ์ธ ๊ฒฝ์ฐ data-ke-style ๊ฐ ํ์ธ
if (element.tagName == 'BLOCKQUOTE') {
let dataKeyStyle = element.getAttribute('data-ke-style');
if (dataKeyStyle !== 'style2') {
return; // data-ke-style์ด style2๊ฐ ์๋๋ฉด ๊ฑด๋๋
}
}
// ๋ชฉ์ฐจ ํญ๋ชฉ์ ์์ฑํ๊ณ ์ถ๊ฐํ๊ธฐ
let listItem = document.createElement('li'); //<li></li>
let link = document.createElement('a'); //<a></a>
link.href = '#navipass-' + index;
listItem.textContent = textContent;
// ๋งํฌ ์๋ ์ฌ๋ฐฑ ์ฃผ๊ธฐ (๋ง์ง๋ง ์์ ๋นผ๊ณ )
listItem.style.marginBottom = '10px';
if (index == headingsAndBlockquotes.length - 1) {
listItem.style.marginBottom = '0px';
}
link.appendChild(listItem); //๊ฒฐ๊ณผ: <a><li></li></a>
naviDivElement.appendChild(link); //๊ฒฐ๊ณผ: <div><a><li></li></a></div>
// ๊ฐ ์์์ ๊ณ ์ ํ ID ๋ถ์ฌ
element.id = 'navipass-' + index;
});
}
// ์์ ์๋ div ์จ๊ธฐ๊ธฐ
function hideNaviDiv() {
// #tag-navigation ๋ด๋ถ์ <a> ํ๊ทธ ๊ฐ์๋ฅผ ํ์ธ
let linkCount = $("#tag-navigation a").length;
// ๋ง์ฝ <a> ํ๊ทธ๊ฐ ํ๋๋ ์์ผ๋ฉด #tag-navigation๋ฅผ ์จ๊น๋๋ค.
if (linkCount === 0) {
$("#tag-navigation").hide();
}
}
</script>
5. [์ ์ฉ] ๋ฒํผ์ ๋๋ฅด๊ณ ํ์ธํฉ๋๋ค
6. ๋์์ธ์ ์์ ํ๊ณ ์ถ์ ๋
- ์คํธ๋ฆฝํธ์์ ์๋ ๋ถ๋ถ ์ฃผ์์ ํ๊ณ ์ผ์ชฝ ํ๋ฉด์ [์๋ก๊ณ ์นจ]์ ๋๋ฅด๊ณ
- ์๋จ์ css๋ถ๋ถ์ ๊ณ ์นฉ๋๋ค
- ์์ ์๊น background-color
- ํ ๋๋ฆฌ border
- ๊ทธ ์ธ์๋ ๊ธ์ ์๊น, ํ ๋๋ฆฌ ๋ฅ๊ธ๋ฆฌ๊ธฐ, ์์น ๋ณ๊ฒฝ์ ํ ์ ์์ต๋๋ค
๊ด๋ จ ๊น ๋งํฌ
'๐ฅ๏ธ ํ๋ก ํธ์๋ > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Axios] Axios๋ฅผ ์ฌ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ (0) | 2023.12.15 |
---|---|
[Script] ์ฒดํฌ๋ฐ์ค (1) | 2023.12.07 |
[Script] ํ์๊ฐ์ ํ์ด์ง ๊ธฐ๋ฅ JavaScript/JQuery๋ก ๊ตฌํํ๊ธฐ (1) | 2023.12.07 |
[JQuery] ์ ์ด์ฟผ๋ฆฌ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ (1) | 2023.12.05 |
[Node.js] Node.js ๋ง๋ณด๊ธฐ (0) | 2023.11.20 |