-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ 2주차 기본 과제 ] 레트로 TodoList 🎮 / 딜리버블밖에 없는 velog 💙 + JS #2
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
야무지네요🔥🔥🔥🔥 고생해쒀!~@
} | ||
|
||
//할 일 리스트 추가. | ||
function handleListItem({ addButtons }, idx) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
단순 index 이지만 의미전달을 위해 dayIdx
정도로 서술함도 괜찮겠당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
조으네요!!
const $ = (selector) => document.querySelector(selector); | ||
const $$ = (selector) => document.querySelectorAll(selector); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
다른 분들도 selector를 통해 dom에 접근할때 변수명을 $로 통일하셨던데 특별한 이유가 있을까요..?
저도 태그를 하나하나 선택하는것이 진짜 좋은 방법인지 의문점이 들었는데 함수를 선언하니까 가독성이 훨~~~씬 좋아지네요!! 저도 바로 적용해보겠씁니다~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사실 저번 기수 팟장님이 쓰신 코드로 요 방법을 알게 되어서 그대로 가져온 거예요!! 흠.. $인 이유는.. 제 추측으로는 가독성을 위해 길이를 줄이는 단순한 기능이라 문자 형식으로 선언하는 것보다는 특수문자를 사용하는 것이 더 나은 것 같아 보이네요!
window.onload = () => { | ||
eventManager({ | ||
navButtons: $$("nav > button"), | ||
todaySection: $("section.today"), | ||
tomorrowSection: $("section.tomorrow"), | ||
addButtons: $$("button.add"), | ||
}); | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
window.onload가 되는 시점에 eventManager함수에 navButtons, todaySection,tomorrowSection,addButtons를 모두 인저로 넘겨주고 각 인자가 필요한 함수에서 그때그때 불러서 쓰는 방식으로 이해했는데 맞을까요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
마자여! 계속해서 같은 코드로 선언해주는 걸 피할 수 있었습니다
e.target.parentElement.classList.contains("today") | ||
? handleListItem({ addButtons }, 0) | ||
: handleListItem({ addButtons }, 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
button에 이벤트가 발생되었을때 지금 로직으로는 today가 클래스명에 포함되어있는지를 먼저 검사한 후 handleListItem의 idx로 넘겨주는데 만약 handleListItem({ addButtons }, e.targetparentElement.classList.contains("today") ? 0 : 1) 이런식으로 작성하게 된다면 today를 검사하는 것 보다 handleListItem 함수 실행이 빨라서 undefined 값이 들어갈 수 도 있지 않을까..? 라는 얇은 생각입니당,,,,
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오오 그렇네요 ..! 👀 혼자 완벽한 코든데 왜 안되지 생각하고 있었는데 저런 허점이 .. ㅋㅋ 감사합니다!
const tagList = $("ul.tagList"); | ||
const li = document.createElement("li"); | ||
const tags = $$("li.tag"); | ||
const tagTextArr = Array.from(tags).map((tag) => tag.innerText); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Array.form 과 map을 통해서 배열을 만드는 방법...! 하나 얻어가요!!!!
시험기간인데도 양질의 코드 감사합니다!!! 많이 배웠슴당 다음 과제도 부탁해요~~ㅎㅎㅎ |
function handleLayout({ todaySection, tomorrowSection, navButtons }) { | ||
navButtons[0].addEventListener("click", (e) => { | ||
e.preventDefault(); | ||
todaySection.className = "today slideToRight"; | ||
tomorrowSection.className = "tomorrow hidden"; | ||
}); | ||
|
||
navButtons[1].addEventListener("click", (e) => { | ||
e.preventDefault(); | ||
todaySection.className = "today slideToOrigin"; | ||
tomorrowSection.className = "tomorrow slideToOrigin"; | ||
}); | ||
|
||
navButtons[2].addEventListener("click", (e) => { | ||
e.preventDefault(); | ||
todaySection.className = "today hidden"; | ||
tomorrowSection.className = "tomorrow slideToLeft"; | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Dev-jwJeong 컴퓨터가 코드를 이해하는 데에 차이가 있는 게 무슨 말일까요 ??!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
별개로 직접 공백을 통해 클래스를 지정하는 부분에서 휴먼에러가 생길 가능성이 크다는 의견도 있을 것 같아요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@joohaem 앗..! 제가 말을 이상하게 적어놨네요ㅜ, ㅜ 컴퓨터가 코드를 이해하는 것보다는 add, remove를 명시적으로 표기해 줌으로써 다른 사람이 코드를 봤을 때 이해하기 쉬울 것 같다는 생각이었습니다..!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그렇네요~!! 어떤 식으로 class를 부여하고 없애는지 직관적으로 알기 위해서는 add, remove 방식이 확실히 좋을 것 같아요! 나중에 다른 분들이 코드 읽고 수정하기에 더 좋겠네요
휴먼 에러도 맞말이구 ..
다음에는 냅다 클래스명 집어넣지 말고 add remove 써야겠어용
.slideToRight { | ||
width: 100vw; | ||
transform-origin: left; | ||
transition: all 0.5s; | ||
} | ||
|
||
.slideToLeft { | ||
width: 100vw; | ||
transform-origin: right; | ||
transition: all 0.5s; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
transform-origin을 통해서 transition의 기준값을 정해주는 방식은 새로운데!! 배워갑니당~~~!!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
구웃-!!!
function handleLayout({ todaySection, tomorrowSection, navButtons }) { | ||
navButtons[0].addEventListener("click", (e) => { | ||
e.preventDefault(); | ||
todaySection.className = "today slideToRight"; | ||
tomorrowSection.className = "tomorrow hidden"; | ||
}); | ||
|
||
navButtons[1].addEventListener("click", (e) => { | ||
e.preventDefault(); | ||
todaySection.className = "today slideToOrigin"; | ||
tomorrowSection.className = "tomorrow slideToOrigin"; | ||
}); | ||
|
||
navButtons[2].addEventListener("click", (e) => { | ||
e.preventDefault(); | ||
todaySection.className = "today hidden"; | ||
tomorrowSection.className = "tomorrow slideToLeft"; | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Dev-jwJeong 컴퓨터가 코드를 이해하는 데에 차이가 있는 게 무슨 말일까요 ??!
week2
폴더를 보시면 됩니다!✨ 구현 기능 명세
오늘만 보기
,내일만 보기
,함께 보기
버튼에 따라 레이아웃을 달리 합니다.버튼에 따라
.slideToRight
,.slideToLeft
,.slideToOrigin
클래스를 이용해 조정했습니다.li
를ul
태그 안에 생성해줘요handleSection
함수 에서 사용자가 어느 section에 있는 버튼을 눌렀는지 idx로 구분합니다. 구분한idx를 바탕으로
handleListItem
함수 에서 li 태그를 생성합니다.li
를 삭제해줘요deleteListItem
함수에서 클릭한 버튼의 parentElement를 삭제하도록 했습니다.🎁 PR Point
이와 같은 함수가 있는데요 코드를 줄이려고
와같이 작성하니 작동하지 않았어요 왤 까요 🤔
😭 소요 시간, 어려웠던 점
😎 구현 결과물
2022-10-14.3.19.43.mov
✨ 구현 기능 명세
.hidden
,.colorGreen
class를 이용했습니다write.js
파일을 참고해주세요!🎁 PR Point
Keydown 시 영어 인풋을 입력했을 때 문제가 없었으나 한글을 입력했을 때 마지막 글자 태그가 한 번 더 생성되는 것을 확인할 수 있었습니다. 한글은 한 글자에 여러 번의 키다운 이벤트가 일어나기 때문인데 참고한 블로그 첨부해요-!
https://kwangsunny.tistory.com/33
😭 소요 시간, 어려웠던 점
3h
😎 구현 결과물
2022-10-14.3.25.12.mov