๊ตญ๋น์ง์ D+50
Front-end ๋ฏธ๋ํ๋ก์ ํธ 6์ผ์ฐจ
- ์น์ ์ ๋๋ฉ์ด์ ์ถ๊ฐ ๋ฐ ๊ฐ์ด๋์ฝ๋ ์์ฑ -
์ค๋ ํ ์ผ
- section0์ ๋ํ canvas ์ ๋๋ฉ์ด์ ์ถ๊ฐ
- section1์ ๋ํ ์คํ์ผ ์ ์ฉ
- ๊ฐ์ด๋ ์ฝ๋ ์์ฑ
ํ์ผ ๊ตฌ์ฑ ๋ฐ ๋ด์ฉ
• style.css
- canvas์ ๋ํ ์คํ์ผ์ ์ค์ ํด ์ฃผ์๋ค.
- section1์ ๋ํ ์คํ์ผ์ ์ค์ ํด ์ฃผ์๋ค.
- footer์ ๋ํ ์คํ์ผ์ ์์ ํด ์ฃผ์๋ค.
footer {
position: relative;
display: flex;
justify-content: center;
align-items: center;
height: 4em;
width: 100%;
background-color: darkgray;
font-size: 2rem;
font-weight: bold;
color: black;
}
.section0-canvas {
left: 0;
top: 0;
width: 100%;
text-align: center;
z-index: -5;
}
.section1-message {
max-width: 100%;
}
.section1-description {
font-size: 2.5rem;
max-width: 1000px;
margin: 0 auto;
line-height: 3em;
}
.section1-description>strong {
float: left;
font-size: 4.5rem;
}
.local-nav-sticky .local-nav {
position: fixed;
left: 0;
top: 0;
border-bottom: 1px solid gray;
-webkit-backdrop-filter: saturate(180%) blur(15px);
-moz-backdrop-filter: saturate(180%) blur(15px);
-o-backdrop-filter: saturate(180%) blur(15px);
backdrop-filter: saturate(180%) blur(15px);
}
.local-nav-sticky .local-nav-links {
border: none;
}
• index.html
- section0์ canvasํ๊ทธ๋ฅผ ์ฌ์ฉํด ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐ ์์ผ ์ฃผ์๋ค.
<div class="sticky-element section0-canvas">
<canvas id="main-canvas" width="1920" height="1080"></canvas>
</div>
• main.js
- canvas์ ๋ํ ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐํด ์ฃผ์๋ค.
- ์ผ์ ๋ถ๋ถ ์คํฌ๋กค ํ์์ ๋ nav๊ฐ ์๋จ์ ๊ณ ์ ๋๋๋ก ํด์ฃผ์๋ค.
- setCanvas : ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ๊ณ 0๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ์บ๋ฒ์ค์ ์ถ๋ ฅํ๋ค.
- setLocalnavMenu : ์คํฌ๋กค๊ฐ์ด localnav๋ฅผ ๋์ด๊ฐ์ ๋ฐ๋ผ localnav์ position์ด fixed๋ก ๋ณ๊ฒฝ๋๋๋ก ํ๋ค.
// setCanvas = ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ๊ณ 0๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ์บ๋ฒ์ค์ ์ถ๋ ฅํ๋ค.
const setCanvas = function()
{
let imageCount = sectionSet[0].vals.imageCount;
let canvasImages = sectionSet[0].objs.canvasImages;
let imageElement;
// ํ์ผ์ ๋ก๋ฉํ๋ค.
for(let i = 0; i < imageCount; i++)
{
imageElement = new Image();
imageElement.src = `./image/apple_${i}.png`;
// ๋ก๋ฉํ ํ์ผ์ ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค.
canvasImages.push(imageElement);
}
// load ์ด๋ฒคํธ ๋ฐ์!!!
imageElement.addEventListener('load', () => {
// ์บ๋ฒ์ค์ 0๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ๋๋ก์ํ๋ค.
sectionSet[0].objs.context.drawImage(canvasImages[0], 0, 0);
})
}
// setLocalnavMenu = ์คํฌ๋กค๊ฐ์ด localnav๋ฅผ ๋์ด๊ฐ์ ๋ฐ๋ผ localnav์ position fixed๋ก ๋ณ๊ฒฝ
// --> class๋ฅผ ๋ถ์ฌ์ฃผ๊ฑฐ๋ ๋ผ์ด์ค์ผ๋ก์จ position๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
const setLocalnavMenu = function()
{
// yOffset๊ฐ์ด localnavํฌ๊ธฐ๋ฅผ ๋์ด๊ฐ๋ค๋ฉด --> ํด๋์ค ์ถ๊ฐ (position fixed)
if(yOffset > 44)
{
document.body.classList.add('local-nav-sticky');
}
// yOffset๊ฐ์ด localnavํฌ๊ธฐ๋ฅผ ๋์ด๊ฐ์ง ์์๋ค๋ฉด --> ํด๋์ค ์ญ์ (position absolute)
else
{
document.body.classList.remove('local-nav-sticky');
}
}
////////////////////////////////////////////////////////
// ์ด๋ฒคํธ ํธ๋ค๋ฌ
// scroll ์ด๋ฒคํธ ๋ฐ์!!!
// --> scroll์ system์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์์์ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํด์ค๋ค.
window.addEventListener('scroll', () => {
// yOffset = ํ์ฌ ์ผ๋ง๋ ์คํฌ๋กค์ด ๋์๋๊ฐ
yOffset = window.scrollY;
// currentSection = ํ์ฌ ์น์
์์น
// sectionYOffset = ์น์
์ ๋ฐ๋ฅธ yOffset์ ์๋๊ฐ
currentSection = getCurrentSection();
sectionYOffset = yOffset - getPrevSectionHeight();
// setBodyID(currentSection) : ํ์ฌ์น์
์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก body์๋ฆฌ๋จผํธ id๊ฐ ์๋ก๊ณ ์นจ
setBodyID(currentSection);
// setLocalnavMenu() : ์๋จ์ nav๋ฅผ yOffset๊ฐ์ ์ํ ๊ณ ์ ์ ๋ฌด๋ฅผ ์ค์
setLocalnavMenu();
// playAnimation() : CSS์ ๋ฐ๋ฅธ ์ ๋๋ฉ์ด์
๋์
playAnimation();
});
// load ์ด๋ฒคํธ ๋ฐ์!!!
// --> load๋ ์ ์ฒดํ์ด์ง๊ฐ ๋ก๋๋ ์ดํ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ค.
window.addEventListener('load', () => {
// setLayout() : ์น์
์ ๋ํ ๋์ด๋ฅผ ์ค์ ํด ์ค๋ค.
setLayout();
// currentSection = ํ์ฌ ์น์
์์น
// sectionYOffset = ์น์
์ ๋ฐ๋ฅธ yOffset์ ์๋๊ฐ
currentSection = getCurrentSection();
sectionYOffset = yOffset - getPrevSectionHeight();
// setCanvas() : ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ๊ณ 0๋ฒ์งธ ์ด๋ฏธ์ง๋ฅผ ์บ๋ฒ์ค์ ์ถ๋ ฅ
setCanvas();
// setBodyID(currentSection) : ํ์ฌ์น์
์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก body์๋ฆฌ๋จผํธ id๊ฐ ์๋ก๊ณ ์นจ
setBodyID(currentSection);
// setLocalnavMenu() : ์๋จ์ nav๋ฅผ yOffset๊ฐ์ ์ํ ๊ณ ์ ์ ๋ฌด๋ฅผ ์ค์
setLocalnavMenu();
})
// ์ฌ์ด์ฆ๋ฅผ ์ฌ์ค์ ํด์ฃผ์์ ๋ ๊ฐ๋ค์ ์ผ๋ถ ๋ค์ ์์ ํด์ฃผ์ด์ผ ํ๋ค.
window.addEventListener("resize", () => {
// setLayout() : ์น์
์ ๋ํ ๋์ด๋ฅผ ์ค์ ํด ์ค๋ค.
setLayout();
// currentSection = ํ์ฌ ์น์
์์น
// sectionYOffset = ์น์
์ ๋ฐ๋ฅธ yOffset์ ์๋๊ฐ
currentSection = getCurrentSection();
sectionYOffset = yOffset - getPrevSectionHeight();
// setBodyID(currentSection) : ํ์ฌ์น์
์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก body์๋ฆฌ๋จผํธ id๊ฐ ์๋ก๊ณ ์นจ
setBodyID(currentSection);
// setLocalnavMenu() : ์๋จ์ nav๋ฅผ yOffset๊ฐ์ ์ํ ๊ณ ์ ์ ๋ฌด๋ฅผ ์ค์
setLocalnavMenu();
})
๊ฒฐ๊ณผํ๋ฉด
๋ฐ์ํ
๋๊ธ