μ κΈμ μ΄μ κΈμ ν νλ©΄μ μΌλκ³ λΉκ΅νλ©΄μ 보면 μ’μ κ² κ°λ€.
리ν©ν°λ§ 리뷰λ₯Ό μ§ννκΈ°μ μμ μ΄λ€ λ°©μμΌλ‘ μ§νν μ§ μ€λͺ
νλλ‘ νκ² λ€. λ¨Όμ 리ν©ν°λ§ μ€κ³
λ¨κ³μμ 리ν©ν°λ§μ μ΄λ€ λ°©ν₯μΌλ‘ μ§ννλμ§ μ΄ν΄λ³΄λλ‘ νλ©°, μ½λ 리ν©ν°λ§μ μ 체μ μΈ λ³ν
μμ λ¨Όμ μ΄ν΄ λ³΄κ³ νλ‘μ νΈ μκ° μμ μμ±ν ꡬν κΈ°λ₯ λͺ©λ‘
λ¨μλ‘ κΈ°λ₯λ³ μ½λ 리ν©ν°λ§ 리뷰
λ₯Ό μ΄ν΄λ³΄λλ‘νκ² λ€.
λ§μ§λ§μΌλ‘ μ½λ 리뷰 체ν¬λ¦¬μ€νΈ μ μꡬμ¬νμ μΌλ§λ λΆν©νλ μ½λμλμ§ νλμ© μ²΄ν¬νλ©° μ΄ν΄λ³΄λλ‘ νκ² λ€.
λ¨Όμ μλμ μ¬μ§μ λ³΄κ³ μ€λͺ νλλ‘ νκ² λ€.
λ¨Όμ 리ν©ν°λ§ μꡬμ¬ν
μ μμ±νλ€. μ΄κ±΄ μ½λ 리뷰 체ν¬λ¦¬μ€νΈμ μꡬμ¬νμ λ°λΌ μμ±νκ³ λͺκ°μ§λ₯Ό μΆκ°ν΄μ€¬λ€. κ·Έλ¬κ³ λμλ ꡬν κΈ°λ₯ μ½λ λ³λ‘ 리ν©ν°λ§μ ν΄μ€μΌκ² λ€κ³ μκ°νκ³ κ΅¬ν κΈ°λ₯ μ½λ 리ν©ν°λ§
μ μμ±ν΄μ€¬λ€. λ§μ§λ§μΌλ‘ 리ν©ν°λ§μ΄ λλλ©΄ μλ¬λ μ€λ₯κ° λ°μνλ λΆλΆμ ν΄κ²°ν΄μ£ΌκΈ°μν΄ κ΅¬νν κΈ°λ₯ λͺ©λ‘
μ μμ±ν΄μ£Όμλ€.
μ€κ³ν λ΄μ©μ 리ν¬μ§ν 리μ README.md
νμΌμ λ§ν¬λ€μ΄μΌλ‘ μμ±ν΄μ£Όμλ€.
μ΄μ κΈμ λ³΄κ³ μλ€λ©΄ μκ² μ§λ§, 리ν©ν°λ§μ μ§ννλ©΄μλ 컀λ°λ©μμ§λ₯Ό AngularJS Commit Message Conventions μ λ§κ² μμ±ν΄μ£Όμλ€. μ΄μ μ΄μ κΈμμ λ³Έ λμ°ν 컀λ°λ©μμ§λ μ‘΄μ¬νμ§ μλλ€.
JS
νμΌμ μΌλ¨μ ν΄λ λ³λ‘ λΆλ₯ν΄μ£Όμλ€. μ΄μ κΈμμ λ°νλ―μ΄ μμ§κΉμ§ λλ ν 리λ₯Ό μ΄λ»κ² λλ μΌνλμ§ λͺ
νν λͺ¨λ₯Έλ€. (μ°ν
μ½μμ λ°°μ°μ§ μμκΉ μΆλ€)
κ·Έλμ λ΄κ° 보기μλ κ°μ μν μ λ°λΌ λΆλ₯κ° μ λμ΄μλ κ² κ°λ€.
ESlint
μ Prettier
λ₯Ό νμ©νμ¬ Airbnb JavaScript μ€νμΌ κ°μ΄λ νκ΅μ΄ λ²μλ³Έμ λ§κ² μ½λλ₯Ό μμ±ν΄μ£Όμλ€.
μ΄μ κΈμμ λ°νμ§λ μμλ κ² κ°μ§λ§, 리ν©ν λ§ μ μλ import
λ¬Έμ ν λ²λ νμ©νμ§ μμκ³ , λͺ¨λν μμ΄ λͺ¨λ javascript
νμΌμ HTML
νμΌλ§λ€ script
νκ·Έλ₯Ό μ΄μ©ν΄μ μμ±ν΄μ£Όμλ€.
λμΆ© μ΄λ° μμΌλ‘ λͺ¨λ HTMLνμΌμ scriptνκ·Έλ€μ λλ €λ°μμλ€..
리ν©ν°λ§ νμλλ index.js
νμΌλ§μ script
νκ·Έλ₯Ό νμ©ν΄ λΆλ¬μ€κ³ index.js
λ΄λΆμ μλ App
λ΄λΆμμ λͺ¨λ νλμ μ²λ¦¬νλλ‘ ν΄μ£Όμλ€. λλ λ€λ₯Έ κ²λ³΄λ€ μ΄λ κ² λͺ¨λνλ₯Ό ν΄μ€ λΆλΆμ΄ 리ν©ν°λ§μμ κ°μ₯ ν° λΆλΆμ΄μλ€κ³ μκ°νλ€.
μ΄μ μ 체μ μΈ λΆλΆμ λͺ¨λ μ΄ν΄λ΄€μΌλ μ λ² κΈμμ λ΄€λ μμλλ‘ κΈ°λ₯λ³ μ½λ 리ν©ν°λ§ 리뷰λ₯Ό μ§ν ν΄λ³΄λλ‘ νμ.
Home
νλ©΄μμ νλ©΄μ λλκ·Ένλ©΄ μΉμ
μ΄ μ μλλ‘ λλκ·Έ λλλ‘ κ΅¬ν.//scrollEvent.js
import { X, DELTA_Y_BOUNDARY, FIRST_PAGE } from '../constants/constant.js';
import { $ } from '../utils/dom.js';
export const handleScroll = (e, currentPage) => {
if ($('.home-header') === null) {
return;
}
const lastPage = document.querySelectorAll('.section').length;
if (e.deltaY > DELTA_Y_BOUNDARY && currentPage < lastPage) {
currentPage++;
} else if (e.deltaY < DELTA_Y_BOUNDARY && currentPage > FIRST_PAGE) {
currentPage--;
}
scrollScreen(currentPage);
return currentPage;
};
export const scrollScreen = currentPage => {
if ($('.menu-tree').classList.contains('is-active')) {
return;
}
const pageHeight = window.innerHeight;
window.scrollTo({
top: currentPage * pageHeight,
left: X,
behavior: 'smooth',
});
};
μ μΌ λ¨Όμ 보μ΄λ μ μ μ μλ³μ
μ 맀μ§λλ²
κ° μ¬λΌμ‘λ€.
κ·Έλ¦¬κ³ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ λΉμ¦λμ€ λ‘μ§
μΈ handleScroll
κ³Ό νλ©΄μ μ€ν¬λ‘€ ν΄μ£Όλ UIλ‘μ§
μΈ scrollScreen
μ΄ λλμ΄μ‘λ€.
μ΄μ ν¨μλ νλμ κΈ°λ₯λ§μ νλ μμ ν¨μ
μ΄λ©°, μ°ν
μ½ ν리μ½μ€ μꡬμ¬νμ΄μλ 15μ€ μ΄λ΄μ΄κΈ°λ νλ€.
κ·Έλ¦¬κ³ μ€λ₯κ° λ°μν μ μλ μΆκ°μ μΈ μν©μ μΆκ°μ μΈ if
λ¬ΈμΌλ‘ κ±Έμ΄λ΄μ£Όλ λΆλΆμ΄ μΆκ°λμ΄μ‘λ€.
if
, else if
λ¬Έμ μ‘΄μ¬νλ μ€λ³΅λ μ½λλ μ΄μ κΈμ μ½λμ λΉκ΅ν΄λ³΄λ©΄ μ κ±°λμμμ μ μ μλ€.
ν¨μμ μΈλ¬Έ
μΌλ‘ μ μΈλ ν¨μλ€μ΄ λͺ¨λ ν¨μννμ
μΌλ‘ λ°λμλ€.
μμ§κΉμ§ λͺ» κ³ μΉ μ€λ₯κ° μλ€..
μμ§κΉμ§ λͺ» κ³ μΉ λΆλΆμ μμ μλꡬνν κΈ°λ₯ λͺ©λ‘
μμ μ΄ν΄λ³Ό μ μλ€.
header
μ 컀μλ₯Ό μ¬λ¦¬λ©΄ header
κ° ν° μμΌλ‘, header
λ΄λΆ μμ΄μ½λ€μ΄ κ²μ μμΌλ‘ λ³νλλ‘ κ΅¬ν.λ©λ΄ μμ΄μ½
μ ν΄λ¦ν μ μνμ λ§κ² λ©λ΄κ° μ΄λ¦¬κ³ λ«νλλ‘ κ΅¬ν.λ©λ΄ μμ΄μ½
μ ν΄λ¦ν μ λ©λ΄ μμ΄μ½
μ λͺ¨μμ΄ μνμ λ°λΌ β°
, X
λ‘ λ³νλ μ λλ©μ΄μ
μ΄ μ¬μλλλ‘ κ΅¬ν.//clickEvent.js
import { $ } from '../utils/dom.js';
export const handleClick = e => {
switch (e.target.id) {
case 'menu-icon':
menuTreeToggle();
}
};
const menuTreeToggle = () => {
const menuTree = document.querySelectorAll('.menu-tree-class-for-toggle');
$('header').classList.toggle('is-active');
for (let i = 0; i < menuTree.length; i++) {
menuTree[i].classList.toggle('is-active');
}
};
wholeMenuTreeToggle
μ MenuTreeToggle
λ‘ λ°κΏμ£Όμλ€.
μκΉμ κ°μ λ°©μμΌλ‘ λΉμ¦λμ€ λ‘μ§
κ³Ό UI λ‘μ§
μ ꡬλΆν΄μ£Όμλ€.
κΉλΉ‘νκ³ forλ¬Έμ
μ΄κΈ°μ
,쑰건μ
,μ¦κ°μ
μ κ³ μ³μ£Όμ§ μμλ€...
resize
μ΄λ²€νΈ λ°μ μ, νλ©΄μ¬μ΄μ¦μ λ§κ² λ°°κ²½μ¬μ§ μ¬μ΄μ¦λ₯Ό λ°κΏμ€μμ΄λ λ΄ μλλλ‘ μ μλν΄μ μμ μ κ±°ν΄μ£Όμλ€.
μλ‘κ³ μΉ¨
μ΄λ²€νΈ λ°μ μ, μΉμ
νμ΄μ§κ° 1λ² νμ΄μ§λ‘ λλκ·Έ λλλ‘ κ΅¬ν.//loadEvent.js
import { $ } from '../utils/dom.js';
import { X, Y, DELAY_MILLISECOND } from '../constants/constant.js';
export const reloadScrollScreen = () => {
const pageHeight = window.innerHeight;
const stackBurgetAnimation = $('.stack-burger-animation4');
setTimeout(() => {
window.scrollTo(X, Y);
}, DELAY_MILLISECOND);
if (stackBurgetAnimation === null) {
return;
}
stackBurgetAnimation.addEventListener('animationend', () => {
window.scrollTo({ top: pageHeight, left: X, behavior: 'smooth' });
});
};
console.log
λ₯Ό μ κ±°ν΄μ£Όμλ€.
λͺ¨λ 맀μ§λλ²
κ° μ κ±° λκ³ , μμλ‘ λ°κΏμ£Όμλ€.
ν¨μμ μΈλ¬Έ
λμ ν¨μννμ
μΌλ‘ λ°κΏμ£Όμλ€.
μ΄ κΈ°λ₯μμ ν΅μ¬μ μΈ λ¦¬ν©ν°λ§μ λ²κ±°νΉ μ λλ©μ΄μ
μ΄ λλκ³ νλ©΄μ μ€ν¬λ‘€ ν΄μ£Όλ κ²μ΄μλλ°, μλλ μ λλ©μ΄μ
μκ°μ κ³μ°ν΄μ setTimeOut
μ μ¬μ©ν΄ νλ©΄μ κΈ°λ€λ Έλ€κ° μ€ν¬λ‘€ νμΌλ, μ΄μ animationend
λΌλ μ΄λ²€νΈλ₯Ό ν΅ν΄ μ λλ©μ΄μ
μ΄ λλλ©΄ νλ©΄μ μ€ν¬λ‘€ ν΄μ€λ€.
ν¨μ¬ μμμ μ΄λ€.
βοΈ README.md
νμΌμ νλ‘κ·Έλ¨μ ꡬνν κΈ°λ₯λ€μ λΆλ¦¬ν΄ μμ λ¨μλ‘ μμ±νλκ°?
βοΈ νλ‘κ·Έλ¨μ μμ±νλ©΄μ μμΈ μΌμ΄μ€ λ±μ μΆκ°νλ λ±, README.md
νμΌμ μ
λ°μ΄νΈνλκ°?
βοΈ νλ‘κ·Έλ¨ μ 체μ λμΌν μ½λ© 컨벀μ μ μ ν΄λκ³ μ΄λ₯Ό μ¬μ©νλκ°?
βοΈ κ°κ°μ 컀λ°μ΄ μ΄λ€ 컀λ°μΈμ§ μμλ³Ό μ μλλ‘ μ»€λ°λ©μΈμ§λ₯Ό μμ±νλκ°?
βοΈ λ³μλͺ λ±μ ν΅μΌμ± μκ², μΆμ½ λλ μλ΅νμ§ μκ³ μμ±νλκ°?
βοΈ μ΄λ€ νλ‘κ·Έλ¨μΈμ§ νλ‘κ·Έλ¨μ μκ°νλ λ΄μ©μ README.md
νμΌμ μμ±νλκ°?
βοΈ κ°μ νλμ½λ©νμ§ μκ³ μμλ₯Ό νμ©νλ©°, ν΄λΉ μμμ μλλ₯Ό λλ¬λΌ μ μλ μ΄λ¦μ λΆμ¬νλκ°?
β JavaScript
μμ μ 곡νλ api
λ₯Ό νμ©νμ¬ ν¨μκ° λͺ
λ°±ν λ¬΄μ¨ μΌμ νλ μ§ μ μ μλλ‘ μ½λλ₯Ό μμ±νλκ°?
βοΈ μ μ곡κ°μ μ¬μ©νμ§ μμλκ°?
βοΈ var
λ₯Ό μ¬μ©νμ§ μμλκ°?
βοΈ νλμ ν¨μλ₯Ό νλμ κΈ°λ₯λ§μ νλ μμ λ¨μλ‘ κ΅¬ννλκ°?
βοΈ μ€λ³΅λ μ½λκ° μλκ°?
βοΈ λΆνμν λ³μ, μμλ³μλ€μ μ κ±°ν΄μ€¬λκ°?
βοΈ λΉμ¦λμ€ λ‘μ§κ³Ό UIλ‘μ§μ λΆλ¦¬νλκ°?
μμ§ μμ¬μ΄ μ μ΄ μ‘΄μ¬νλ κ²μ μ¬μ€μ΄μ§λ§ μ΄μ κ³Ό λΉκ΅νλ©΄ ν¨μ¬ μ½λκ° λ³΄κΈ°μλ μ’μμ‘κ³ , μ μ§λ³΄μμλ μ’μμ‘λ€! (μ¬μ€ μμμ± μ¬λμ μμμ±κ² μ§λ§ μμ κ°μ€ν¬κ° μμλ€)
1μ°¨ 리뷰λ μ΄μ λμ΄ λ¬λ€. λ€μμ λ΄κ° μ±μ₯ν¨μ λλΌλ©΄ μλ‘μ΄ νλ‘μ νΈλ₯Ό κ°μ Έμ€λ, μ΄ νλ‘μ νΈλ₯Ό λ λ€μ λ°μ μν€λ 2μ°¨ λ¦¬λ·°λ‘ λ€μ μ°Ύμμ€λλ‘ νκ² λ€.
κΈ΄ κΈμ μ½μ΄μ€ λͺ¨λμκ² κ°μ¬νλ€λ λ§μ μ νκ³ κΈμ λ§μΉλλ‘ νκ² λ€!
μλ‘μ΄ νλ‘μ νΈλ λ³΄κ³ μΆμ΄μ~^^