728x90
์๋ฐ์คํฌ๋ฆฝํธ : ํจ๋ด๋์ค ํจ๊ณผ : ๋ฉ๋ด ์ด๋
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ํ ํจ๊ณผ๋ค ์ค, ํจ๋ด๋์ค ํจ๊ณผ์ ๋๋ค. ์คํฌ๋กค์ ์์น์ ๋ฐ๋ผ ๋ฉ๋ด ํญ์ ํด๋์ค์ ๋ณํ๋ฅผ ์ฃผ๊ณ , ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ฉด ๋ฉ๋ด๊ฐ ์๋ ๊ณณ์ผ๋ก ๋ถ๋๋ฝ๊ฒ ์ด๋ํ๊ฒ๋ ์์ ํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
HTML ์์ค
HTML์ ๋จผ์ nav, main, aside ์ธ ํํธ๋ก ๋๋์ด ์ฃผ์์ต๋๋ค. nav์๋ 9๊ฐ์ ๋ฉ๋ด, main์๋ 9๊ฐ์ ์ฝํ ์ธ , aside์๋ ์คํฌ๋กค์ ์์น๊ฐ ๋ชฉ๋ก์ ๋ง๋ค์ด ์ฃผ์์ต๋๋ค.
<nav id="parallax__nav">
<ul>
<li class="active"><a href="#section1">๋ฉ๋ด1</a></li>
<li><a href="#section2">๋ฉ๋ด2</a></li>
<li><a href="#section3">๋ฉ๋ด3</a></li>
<li><a href="#section4">๋ฉ๋ด4</a></li>
<li><a href="#section5">๋ฉ๋ด5</a></li>
<li><a href="#section6">๋ฉ๋ด6</a></li>
<li><a href="#section7">๋ฉ๋ด7</a></li>
<li><a href="#section8">๋ฉ๋ด8</a></li>
<li><a href="#section9">๋ฉ๋ด9</a></li>
</ul>
</nav>
<!-- //parallax__nav -->
<main id="parallax__cont">
<div id="contents">
<section id="section1" class="content__item">
<span class="content__item__num">01</span>
<h2 class="content__item__title">section1</h2>
<figure class="content__item__imgWrap">
<div class="content__item__img"></div>
</figure>
<p class="content__item__desc">๊ฒฐ๊ณผ๋ ์ค์ํ์ง๋ง, ๊ณผ์ ์ ๋ ์ค์ํ๊ฒ ์๊ฐํ๋ค.</p>
</section>
<!-- //section1 -->
<section id="section2" class="content__item">
<span class="content__item__num">02</span>
<h2 class="content__item__title">section2</h2>
<figure class="content__item__imgWrap">
<div class="content__item__img"></div>
</figure>
<p class="content__item__desc">๋น๊ฐ ์จ ๋ค์์๋ ๋ง์ ๋ ์จ๊ฐ ๋๋ค.</p>
</section>
<!-- //section2 -->
<section id="section3" class="content__item">
<span class="content__item__num">03</span>
<h2 class="content__item__title">section3</h2>
<figure class="content__item__imgWrap">
<div class="content__item__img"></div>
</figure>
<p class="content__item__desc">์ ์งํ ์ฌ๋์ด ์๋ค๊ณ ๋งํ๋ ์ฌ๋์ด์ผ๋ง๋ก ๊ฐ์ฅ ์ ์งํ์ง ๋ชปํ ์ฌ๋์ด๋ค.</p>
</section>
<!-- //section3 -->
<section id="section4" class="content__item">
<span class="content__item__num">04</span>
<h2 class="content__item__title">section4</h2>
<figure class="content__item__imgWrap">
<div class="content__item__img"></div>
</figure>
<p class="content__item__desc">์ธ์์ ๊ณ ํต์ผ๋ก ๊ฐ๋ํ์ง๋ง, ๊ทธ๊ฒ์ ์ด๊ฒจ๋ด๋ ์ผ๋ก๋ ๊ฐ๋ํ๋ค.</p>
</section>
<!-- //section4 -->
<section id="section5" class="content__item">
<span class="content__item__num">05</span>
<h2 class="content__item__title">section5</h2>
<figure class="content__item__imgWrap">
<div class="content__item__img"></div>
</figure>
<p class="content__item__desc">๋ฌด๋กํ ์ฌ๋์ ํ์๋ ๋ด ํ์ค์ ๋ฐ๋ก ์ก๊ฒ ํด์ฃผ๋ ์ค์น์ด๋ค.</p>
</section>
<!-- //section5 -->
<section id="section6" class="content__item">
<span class="content__item__num">06</span>
<h2 class="content__item__title">section6</h2>
<figure class="content__item__imgWrap">
<div class="content__item__img"></div>
</figure>
<p class="content__item__desc">๊ฒธ์ํ ์๋ง์ด ๋ค์ค๋ฆด ๊ฒ์ด์, ์ ์จ ์ผํ๋ ์๋ง์ด ๊ฐ์ง ๊ฒ์ด๋ค.</p>
</section>
<!-- //section6 -->
<section id="section7" class="content__item">
<span class="content__item__num">07</span>
<h2 class="content__item__title">section7</h2>
<figure class="content__item__imgWrap">
<div class="content__item__img"></div>
</figure>
<p class="content__item__desc">๋ง๋ ์๋ฆ๋ค์ด ๊ฝ์ฒ๋ผ ๊ทธ ์๊น์ ์ง๋๊ณ ์๋ค.</p>
</section>
<!-- //section7 -->
<section id="section8" class="content__item">
<span class="content__item__num">08</span>
<h2 class="content__item__title">section8</h2>
<figure class="content__item__imgWrap">
<div class="content__item__img"></div>
</figure>
<p class="content__item__desc">์๊ฐ์ ์๋ํ ์ค์น์ด๊ธฐ๋ ํ์ง๋ง ๋ถํํ๋ ์์ ์ ๋ชจ๋ ์ ์๋ฅผ ์ฃฝ์ธ๋ค.</p>
</section>
<!-- //section8 -->
<section id="section9" class="content__item">
<span class="content__item__num">09</span>
<h2 class="content__item__title">section9</h2>
<figure class="content__item__imgWrap">
<div class="content__item__img"></div>
</figure>
<p class="content__item__desc">์ฌ๋์ ๋ ์ฌ๋์ด ๋ง์ฃผ ์ณ๋ค๋ณด๋ ๊ฒ์ด ์๋๋ผ ํจ๊ป ๊ฐ์ ๋ฐฉํฅ์ ๋ฐ๋ผ๋ณด๋ ๊ฒ์ด๋ค.</p>
</section>
<!-- //section9 -->
</div>
</main>
<!-- //main -->
<aside id="parallax__info">
<div class="scroll">scrollTop : <span>0</span>px</div>
<div class="info">
<ul>
<li>#section1 offset() : <span class="offset1">0</span>px</li>
<li>#section2 offset() : <span class="offset2">0</span>px</li>
<li>#section3 offset() : <span class="offset3">0</span>px</li>
<li>#section4 offset() : <span class="offset4">0</span>px</li>
<li>#section5 offset() : <span class="offset5">0</span>px</li>
<li>#section6 offset() : <span class="offset6">0</span>px</li>
<li>#section7 offset() : <span class="offset7">0</span>px</li>
<li>#section8 offset() : <span class="offset8">0</span>px</li>
<li>#section9 offset() : <span class="offset9">0</span>px</li>
</ul>
</div>
</aside>
<!-- //parallax__info -->
CSS ์์ค
CSS๋ก ์คํ์ผ ์์ฑ์ ์ถ๊ฐํด ์ฃผ์์ต๋๋ค. ๋ฉ๋ด์ info ๋ฐ์ค๋ position: fixed๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ๊ณ ์ ๋๊ฒ ์ค์ ํด ์ฃผ์์ต๋๋ค.
/* parallaxType */
/* parallax__nav */
#parallax__nav {
position: fixed;
right: 20px;
top: 20px;
z-index: 2000;
background-color: rgba(0, 0, 0, 0.4);
padding: 20px 30px;
border-radius: 50px;
}
#parallax__nav li {
display: inline;
margin: 0 5px;
}
#parallax__nav li a {
display: inline-block;
height: 30px;
padding: 5px 10px;
text-align: center;
line-height: 30px;
}
#parallax__nav li.active a {
background: #fff;
color: #000;
border-radius: 20px;
box-sizing: content-box;
}
#parallax__cont {
max-width: 1600px;
width: 98%;
margin: 0 auto;
/* background-color: rgba(255, 255, 255, 0.1); */
}
.content__item {
width: 1000px;
max-width: 70vw;
margin: 30vw auto;
/* background-color: rgba(255, 255, 255, 0.3); */
text-align: left;
margin-right: 0;
position: relative;
padding-top: 7vw;
}
/* nth-child์ ๊ดํธ ์์๋ ์์์ ์ฌ์ฉํ ์ ์๋ค, even = 2n (์ง์๋ง ์ ํ) */
.content__item:nth-child(even) {
margin-left: 0;
text-align: right;
}
.content__item__num {
font-size: 35vw;
font-family: "Lato";
font-weight: 100;
position: absolute;
left: -5vw;
top: -16vw;
opacity: 0.07;
z-index: -2;
}
.content__item:nth-child(even) .content__item__num {
/* left ๊ฐ ์ด๊ธฐํ */
left: auto;
right: -5vw;
}
.content__item__title {
font-weight: 400;
/* ์ฒซ ๊ธ์๋ง ๋๋ฌธ์ */
text-transform: capitalize;
}
.content__item__imgWrap {
width: 100%;
padding-bottom: 56.25%;
background: #000;
position: relative;
overflow: hidden;
z-index: -1;
}
.content__item__img {
position: absolute;
background-image: url(../assets/img/effect_bg20-min.jpg);
background-repeat: no-repeat;
background-position: center center;
background-size: cover;
width: 110%;
height: 110%;
left: -5%;
top: -5%;
filter: saturate(0%);
transition: all 1s;
}
.content__item:nth-child(1) .content__item__img {
background-image: url(../assets/img/effect_bg18-min.jpg);
}
.content__item:nth-child(2) .content__item__img {
background-image: url(../assets/img/effect_bg17-min.jpg);
}
.content__item:nth-child(3) .content__item__img {
background-image: url(../assets/img/effect_bg16-min.jpg);
}
.content__item:nth-child(4) .content__item__img {
background-image: url(../assets/img/effect_bg15-min.jpg);
}
.content__item:nth-child(5) .content__item__img {
background-image: url(../assets/img/effect_bg14-min.jpg);
}
.content__item:nth-child(6) .content__item__img {
background-image: url(../assets/img/effect_bg13-min.jpg);
}
.content__item:nth-child(7) .content__item__img {
background-image: url(../assets/img/effect_bg19-min.jpg);
}
.content__item:nth-child(8) .content__item__img {
background-image: url(../assets/img/effect_bg20-min.jpg);
}
.content__item:nth-child(9) .content__item__img {
background-image: url(../assets/img/effect_bg04-min.jpg);
}
.content__item__desc {
font-size: 4vw;
line-height: 1.4;
margin-top: -5vw;
margin-left: -4vw;
word-break: keep-all;
}
.content__item:nth-child(even) .content__item__desc {
margin-left: auto;
margin-right: -4vw;
}
#parallax__info {
position: fixed;
left: 10px;
bottom: 10px;
z-index: 2000;
background: rgba(0, 0, 0, 0.6);
color: #fff;
padding: 20px;
border-radius: 10px;
}
#parallax__info li,
.scrollTop {
line-height: 1.4;
}
@media (max-width: 800px) {
#parallax__cont {
margin-top: 70vw;
}
#parallax__nav {
padding: 10px;
right: auto;
left: 10px;
top: 10px;
border-radius: 5px;
background-color: rgba(0, 0, 0, 0.8);
}
#parallax__nav li {
display: block;
margin: 5px;
}
#parallax__nav li a {
font-size: 14px;
padding: 5px;
border-radius: 5px;
height: auto;
line-height: 1;
}
#parallax__nav li.active a {
border-radius: 5px;
}
}
JAVASCRIPT ์์ค
window.addEventListener("scroll", () => {
// 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ผ๋ ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ ์ฉ๋๋ ๋ฉ์๋๊ฐ ๋ฌ๋ผ์,
// 3๊ฐ์ง ์ ๋ถ ์์ฑํ๋ ๊ฒ์ด ์ข์.
// 1. let scrollTop = window.pageYOffset;
// 2. let scrollTop = window.scrollY;
// 3. let scrollTop = document.documentElement.scrollTop;
let scrollTop = window.pageYOffset || window.scrollY || document.documentElement.scrollTop;
// if (scrollTop > document.getElementById("section1").offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(1)").classList.add("active");
// }
// if (scrollTop > document.getElementById("section2").offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(2)").classList.add("active");
// }
// if (scrollTop > document.getElementById("section3").offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(3)").classList.add("active");
// }
// if (scrollTop > document.getElementById("section4").offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(4)").classList.add("active");
// }
// if (scrollTop > document.getElementById("section5").offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(5)").classList.add("active");
// }
// if (scrollTop > document.getElementById("section6").offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(6)").classList.add("active");
// }
// if (scrollTop > document.getElementById("section7").offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(7)").classList.add("active");
// }
// if (scrollTop > document.getElementById("section8").offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(8)").classList.add("active");
// }
// if (scrollTop > document.getElementById("section9").offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(9)").classList.add("active");
// }
// for๋ฌธ
// for (let i = 1; i <= 9; i++) {
// if (scrollTop > document.getElementById("section" + i).offsetTop) {
// document.querySelectorAll("#parallax__nav li").forEach((li) => {
// li.classList.remove("active");
// });
// document.querySelector("#parallax__nav li:nth-child(" + i + ")").classList.add("active");
// }
// }
// forEach๋ฌธ
document.querySelectorAll(".content__item").forEach((el, i) => {
// ์ค์ฐจ๋ฅผ ์ค์ด๊ธฐ ์ํด -2
if (scrollTop > el.offsetTop - 2) {
document.querySelectorAll("#parallax__nav li").forEach((li) => {
li.classList.remove("active");
});
document.querySelector("#parallax__nav li:nth-child(" + (i + 1) + ")").classList.add("active");
}
});
// info
document.querySelector(".scroll span").innerText = Math.round(scrollTop);
// document.querySelector(".offset1").innerText = document.getElementById("section1").offsetTop;
// document.querySelector(".offset2").innerText = document.getElementById("section2").offsetTop;
// document.querySelector(".offset3").innerText = document.getElementById("section3").offsetTop;
// document.querySelector(".offset4").innerText = document.getElementById("section4").offsetTop;
// document.querySelector(".offset5").innerText = document.getElementById("section5").offsetTop;
// document.querySelector(".offset6").innerText = document.getElementById("section6").offsetTop;
// document.querySelector(".offset7").innerText = document.getElementById("section7").offsetTop;
// document.querySelector(".offset8").innerText = document.getElementById("section8").offsetTop;
// document.querySelector(".offset9").innerText = document.getElementById("section9").offsetTop;
for (let i = 1; i <= 9; i++) {
document.querySelector(".offset" + i).innerText = document.getElementById("section" + i).offsetTop;
}
});
// ๋ฉ๋ด๋ฅผ ํด๋ฆญํ๋ฉด ์คํฌ๋กค ์ด๋์ ๋ถ๋๋ฝ๊ฒ
// ๋ฑ๋ฑํ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋จผ์ ๋ง์์ฃผ๊ณ , ์๋กญ๊ฒ ๋ถ๋๋ฌ์ด(smooth) ์ด๋ฒคํธ ๋ง๋ค์ด์ฃผ๊ธฐ
document.querySelectorAll("#parallax__nav li a").forEach((li) => {
li.addEventListener("click", (e) => {
e.preventDefault();
document.querySelector(li.getAttribute("href")).scrollIntoView({
behavior: "smooth",
});
});
});
์ ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฒฐ๊ณผ
728x90
๋๊ธ