-
Notifications
You must be signed in to change notification settings - Fork 0
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주차 기본/심화/생각 과제 ] 웨비의 사진관 😋 가계부 💸 #2
base: main
Are you sure you want to change the base?
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.
심화까지 너무 너무 고생했어 언니 !! 전체적으로 코드가 이해하기 쉬웠어용 역시 귯귯!! 👍🏻💖
assign2/category.js
Outdated
function isEntered(e, isPlus) { | ||
if (e.keyCode === 13) { | ||
const h3 = document.createElement("h3"); | ||
h3.innerText = e.target.value; |
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.
13이 무엇을 의미하는지 모를 수도 있으니까
function isEntered(e, isPlus) { | |
if (e.keyCode === 13) { | |
const h3 = document.createElement("h3"); | |
h3.innerText = e.target.value; | |
function isEntered(e, isPlus) { | |
if (event.key === "Enter") { | |
const h3 = document.createElement("h3"); | |
h3.innerText = e.target.value; |
요런식이나 13을 상수화해서 표현하는 것도 가독성 측면에서 좋을 것 같아!!!
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.
코드에서 $
를 쓴게 안보이는데 따로 의미가 있을까?? 내가 못찾은 거라면 미안해..,.😓
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.
원래 쓰려고 하다가 첨에 잘 안되기두 했구 오히려 더더 헷갈려서ㅠ 일단 보류해 두었으,,,,, 너무 헷갈리게 id나 class이름을 지은 것 같아ㅠ
// 1.a , b | ||
const firstImages = document.querySelectorAll(".first_section_pic"); | ||
|
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.
우웅 마자요!!! 근데 쓰다 안 쓰다보다 일단 안 쓰는게 나을 것 같아서 일차적으로는 안 썻으
//심화 1번 | ||
const pHeight = p.clientHeight; | ||
const summaryHeight = p.scrollHeight; | ||
|
||
if (pHeight < summaryHeight) { |
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.
오옹 나는 p태그의 높이를 getComputedStyle(detail).height
로 받아와서 구현했는데 이렇게도 할 수 있구나
> | ||
</fieldset> | ||
<h2>종류</h2> | ||
<select class="modal_select" id="income_select" name="모할래"></select> |
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.
아 사랑해ㅠ 😍
assign2/index.js
Outdated
if (list.classList.contains(deletedId)) { | ||
const h3 = list.querySelector("h3"); | ||
const deletedMoney = parseInt(h3.innerText.replace(/,/g, ""), 10); | ||
|
||
if (h3.classList.contains("plus")) { | ||
plusMoney.innerText = ( | ||
parseInt(plusMoney.innerText.replace(/,/g, ""), 10) - deletedMoney | ||
).toLocaleString(); | ||
|
||
totalMoney.innerText = ( | ||
parseInt(totalMoney.innerText.replace(/,/g, ""), 10) - deletedMoney | ||
).toLocaleString(); | ||
} else if (h3.classList.contains("minus")) { | ||
minusMoney.innerText = ( | ||
parseInt(minusMoney.innerText.replace(/,/g, ""), 10) + deletedMoney | ||
).toLocaleString(); | ||
|
||
totalMoney.innerText = ( | ||
parseInt(totalMoney.innerText.replace(/,/g, ""), 10) - deletedMoney | ||
).toLocaleString(); | ||
} | ||
list.remove(); | ||
deleteModal.classList.replace("delete_modal", HIDDEN_CLASS); | ||
} |
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.
같은 부분이 여러 번 반복되고 있어서 함수화 시키면 코드 중복을 줄일 수도 있고 가독성이 좋아질 것 같아!!!
if (list.classList.contains(deletedId)) { | |
const h3 = list.querySelector("h3"); | |
const deletedMoney = parseInt(h3.innerText.replace(/,/g, ""), 10); | |
if (h3.classList.contains("plus")) { | |
plusMoney.innerText = ( | |
parseInt(plusMoney.innerText.replace(/,/g, ""), 10) - deletedMoney | |
).toLocaleString(); | |
totalMoney.innerText = ( | |
parseInt(totalMoney.innerText.replace(/,/g, ""), 10) - deletedMoney | |
).toLocaleString(); | |
} else if (h3.classList.contains("minus")) { | |
minusMoney.innerText = ( | |
parseInt(minusMoney.innerText.replace(/,/g, ""), 10) + deletedMoney | |
).toLocaleString(); | |
totalMoney.innerText = ( | |
parseInt(totalMoney.innerText.replace(/,/g, ""), 10) - deletedMoney | |
).toLocaleString(); | |
} | |
list.remove(); | |
deleteModal.classList.replace("delete_modal", HIDDEN_CLASS); | |
} | |
function updateMoney(element, moneyChange) { | |
const moneyValue = parseInt(element.innerText.replace(/,/g, ""), 10); | |
const newMoneyValue = moneyValue + moneyChange; | |
element.innerText = newMoneyValue.toLocaleString(); | |
} | |
if (h3.classList.contains("plus")) { | |
updateMoney(plusMoney, -deletedMoney); | |
updateMoney(totalMoney, -deletedMoney); | |
} else if (h3.classList.contains("minus")) { | |
updateMoney(minusMoney, deletedMoney); | |
updateMoney(totalMoney, -deletedMoney); | |
} | |
이런식으로 ㅎㅎ
const h5 = document.createElement("h5"); | ||
h5.innerText = title; | ||
|
||
const h4 = document.createElement("h4"); | ||
h4.innerText = summary; | ||
|
||
const h3 = document.createElement("h3"); | ||
h3.innerText = getto |
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.
혹시 여기서 heading
태그를 사용한 이유가 있을까요??
생각하기 나름이겠지만 데이터 항목의 세부 정보라 <p>
태그가 더 어울리지 않을까 생각이 드는데!!
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.
마쟈!! 그러네!! 나는 약간 하나하나 subHeading느낌으로 다가왔어가지구,,!
assign2/index.js
Outdated
}); | ||
|
||
//심화 2.a | ||
if (howMuchSummaried.length == 0 || summarySummarized.length == 0) { |
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.
if (howMuchSummaried.length == 0 || summarySummarized.length == 0) { | |
if (!howMuchSummaried || !summarySummarized) { |
이렇게 더 간단하게 표현할 수도 있겠다!
const DATA = [ | ||
{ title: "꽃속의 웰코", summary: "이뿌지!!" }, | ||
{ title: "멀보니웰코", summary: "날씨 조타!" }, | ||
{ title: "눈웃음웰코", summary: "모야! 햇빛 죠아!" }, |
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.
오오 이거 객체로 빼쥰거 좋은 것 같아 넘굿굿!!!!!
assign2/index.js
Outdated
} else { | ||
makeList(newList, list); | ||
alert("저장되었습니다."); | ||
} |
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.
사실 이건 코드보단 UX적인 측면이긴 하지만 저장한 후에는 입력필드를 초기화해주는게 어떨까?!! ㅎㅎ
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.
심화과제까지 완전 고생 많았땅!!!!! 주석 잘 달아줘서 너무 편하게 볼 수 있었어!! 코드 보면서 많이 배워가 고마워🫶
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.
나두 이게 어떤 의미인지 궁금해!!
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.
중복된 선택자들에게 다 적용하는 함수를 만들어주려면 함수명으로 $를 쓴다는 말인가?!
h2.classList.add("title"); | ||
const p = document.createElement("p"); | ||
p.classList.add("summary"); | ||
const { title, summary } = DATA[index]; |
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.
이런게 바로 구조분해 할당이군요.. 지인짜 깔끔하다 ...
|
||
if (pHeight < summaryHeight) { | ||
div.appendChild(moreBtn); | ||
!moreBtnClicked ? (moreBtn.style.display = "flex") : null; |
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.
삼항연산자 쓰니까 되게 깔끔하네용.. 저기서 null은 아무런 동작을 하지 않는거야?
나는 if else가 아니라 if만 써야하는 상황에서 else에는 어떤 동작을 넣어줘야 하는건지를 몰라서 삼항연산자를 못 쓰고 있었거든...!
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.
우웅!! 사실 if만 사용하는 부분에선 이항 연산자 사용해도 되긴 해용! 아니면 저렇게 null로?
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.
오.. 조금 더 공부해봐야겠다! 또 하나 배워가용🫶
<header> | ||
<h1>카테고리 관리</h1> | ||
</header> | ||
<main class="category_page"> |
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 getCategory = JSON.parse(getItem); | ||
|
||
getCategory.forEach((ele) => { | ||
const { category, isPlus } = ele; |
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.
여기도 구조분해 할당 완전 최고당,,
HISTORY_LIST.forEach((element) => { | ||
const { money, getto } = element; | ||
getto ? (IN_MONEY += money) : (OUT_MONEY += money); | ||
plusMoney.innerText = IN_MONEY.toLocaleString(); | ||
minusMoney.innerText = OUT_MONEY.toLocaleString(); | ||
}); |
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.
IN_MONEY
랑 OUT_MONEY
를 먼저 구한 다음에 이 둘을 이용해 INIT_BALANCE를 구하면 forEach문을 한번만 돌려도 되지 않을까 하는 생각이 들었습니당 ..
//버튼 불러오기 | ||
const inputPlus = document.getElementById("input_plus"); | ||
const inputMinus = document.getElementById("input_minus"); | ||
const HIDDEN_CLASS = "hidden"; |
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.
따로 상수화 시켜준거 좋아용! 내꺼에도 적용해볼게!!!!
assign2/index.js
Outdated
inputPlus.addEventListener("change", () => filterList()); | ||
inputMinus.addEventListener("change", () => filterList()); |
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.
inputPlus.addEventListener("change", () => filterList()); | |
inputMinus.addEventListener("change", () => filterList()); | |
inputPlus.addEventListener("change", filterList); | |
inputMinus.addEventListener("change", filterList); |
혹시 화살표 함수를 써준 다른 이유가 있을까?! 매개변수로 넘겨줘야 하는게 없는데도 저렇게 쓴 이유가 궁금해!
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.
정신없음이슈,,,ㅎ
assign2/index.js
Outdated
incomeCheck.addEventListener("change", () => selectCheck()); | ||
expenditureCheck.addEventListener("change", () => selectCheck()); |
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.
이렇게 습관이 무섭습니다...^^;;
title: selectedOption, | ||
summary: summarySummarized, | ||
money: howMuchSummaried, | ||
getto: incomeCheck.checked ? true : false, |
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.
진짜 처음하는 나라서 부족한 부분이 너무 많은 것 같다..
moreBtn.addEventListener("click", () => { | ||
p.classList.replace("summary", "summaryAll"); | ||
moreBtnClicked = true; | ||
moreBtn.style.display = "none"; | ||
}); | ||
}); |
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.
심화과제는 못했지만
클릭하는 이벤트가 발생했을 때 summary가 summaryAll로 바뀌고
display가 none으로 더보기 창이 없어지는 건 이해가 되는데
moreBtnClicked = true; 라는 불린값은 어째서 들어가는 것인가요?
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.
아 요고 더보기 버튼이 눌렸었는지 안 눌렸는지 확인하려고 넣어둔 친구입니다!
그러니까 더보기 버튼을 addEventListener
로 click 이벤트를 줬을 때 더보기 버튼이 눌렸다! 라는 걸 표현해서 이후에 더보기 버튼이 처음처럼 사진에 마우스를 올리면 나타날 수 있도록 하려고 주었어요!
|
||
export default DATA; |
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.
나나 모듈에 대해서 잘 몰랐는데
export default DATA; 이렇게 하면 import로 해서 다른 JS와 연결한 후에
DATA안에 상수 값을 따로 넣어주니까 잘 구분되서 가독성을 올리려는거지?
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.
중복된 선택자들에게 다 적용하는 함수를 만들어주려면 함수명으로 $를 쓴다는 말인가?!
|
||
toLeft.addEventListener("click", () => { | ||
const articleWidth = article.scrollLeft; |
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.
이건 무슨 칭찬이야 너무 고맙군
-webkit-line-clamp: 3; | ||
-webkit-box-orient: vertical; |
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.
이렇게 세로 줄 단위로 표시할 수 있는 방법이 있구나
좋은 속성 알아갑니당!
//1.a | ||
export const HISTORY_LIST = [ | ||
{ |
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.
처음에 봤던 export default DATA는 마지막에 export가 있었는데
처음에 export 하고 넣어주는 것의 차이가 있을까요?
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.
아뇨 없슈!
height="100" | ||
viewBox="0 0 48 48"> | ||
<path | ||
d="M 23.951172 4 A 1.50015 1.50015 0 0 0 23.072266 4.3222656 L 8.859375 15.519531 C 7.0554772 16.941163 6 19.113506 6 21.410156 L 6 40.5 C 6 41.863594 7.1364058 43 8.5 43 L 18.5 43 C 19.863594 43 21 41.863594 21 40.5 L 21 30.5 C 21 30.204955 21.204955 30 21.5 30 L 26.5 30 C 26.795045 30 27 30.204955 27 30.5 L 27 40.5 C 27 41.863594 28.136406 43 29.5 43 L 39.5 43 C 40.863594 43 42 41.863594 42 40.5 L 42 21.410156 C 42 19.113506 40.944523 16.941163 39.140625 15.519531 L 24.927734 4.3222656 A 1.50015 1.50015 0 0 0 23.951172 4 z M 24 7.4101562 L 37.285156 17.876953 C 38.369258 18.731322 39 20.030807 39 21.410156 L 39 40 L 30 40 L 30 30.5 C 30 28.585045 28.414955 27 26.5 27 L 21.5 27 C 19.585045 27 18 28.585045 18 30.5 L 18 40 L 9 40 L 9 21.410156 C 9 20.030807 9.6307412 18.731322 10.714844 17.876953 L 24 7.4101562 z"></path> |
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.
이거 그냥 svg 파일 넣다보니까!
여기 참고!
<path | ||
d="M 23.951172 4 A 1.50015 1.50015 0 0 0 23.072266 4.3222656 L 8.859375 15.519531 C 7.0554772 16.941163 6 19.113506 6 21.410156 L 6 40.5 C 6 41.863594 7.1364058 43 8.5 43 L 18.5 43 C 19.863594 43 21 41.863594 21 40.5 L 21 30.5 C 21 30.204955 21.204955 30 21.5 30 L 26.5 30 C 26.795045 30 27 30.204955 27 30.5 L 27 40.5 C 27 41.863594 28.136406 43 29.5 43 L 39.5 43 C 40.863594 43 42 41.863594 42 40.5 L 42 21.410156 C 42 19.113506 40.944523 16.941163 39.140625 15.519531 L 24.927734 4.3222656 A 1.50015 1.50015 0 0 0 23.951172 4 z M 24 7.4101562 L 37.285156 17.876953 C 38.369258 18.731322 39 20.030807 39 21.410156 L 39 40 L 30 40 L 30 30.5 C 30 28.585045 28.414955 27 26.5 27 L 21.5 27 C 19.585045 27 18 28.585045 18 30.5 L 18 40 L 9 40 L 9 21.410156 C 9 20.030807 9.6307412 18.731322 10.714844 17.876953 L 24 7.4101562 z"></path> |
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.
위에 설명 추가했어요!
getto: true, | ||
}, | ||
{ | ||
title: "의류", | ||
summary: "지그재그", | ||
money: 20000, | ||
getto: false, |
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.
getto의 값을 boolean값으로 줘서 차별화를 둔다는 생각 되게 기발한 것 같아
|
||
1. 올림픽공원역 3번 출구에서~~... | ||
|
||
-> `선언형 프로그래밍` | ||
어떤 방법으로 나타낼지 보다는 무엇과 같은지를 설명하는 경우 | ||
|
||
``` | ||
function addOne(arr){ | ||
return arr.map((i) => i+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.
잘 와닿지 않는 느낌이였는데
주소에 대한 예시로 설명해주니까 한번에 이해됌!
✨ 구현 기능 명세
기본 과제
웨비의 사진관 😋
이미지 (첫번째 섹션만 해당)
이미지 호버시 백그라운드가 어둡게 처리되고, 해당 사진에 대한 제목과 설명이 나타납니다.
이미지에서 벗어나면 사라집니다.
→ 한번에 반드시 하나의 이미지의 설명만 나타납니다.
top버튼
가계부 💸
최초 데이터
상수로
INIT_BALANCE
,HISTORY_LIST
데이터를 가집니다. (상수명은 자유)INIT_BALANCE
= 0HISTORY_LIST
: 입출금 내역 리스트 (4개
)최초 실행시 위 상수 데이터들 이용해 렌더링합니다. (즉, html에 직접 박아놓는 하드코딩 ❌)
→ 나의 자산은
INIT_BALANCE
로부터 4개의 입출금 내역 리스트를 반영하여 보여줍니다.총수입 / 총지출
HISTORY_LIST
에 있는 수입 내역과 지출 내역을 계산해서 총수입, 총지출을 보여줍니다.수입/지출 필터링
리스트 삭제
X
버튼을 누르면 해당 리스트가 삭제됩니다.리스트 추가
수입
지출
버튼카테고리
를 선택수입
을 선택하면 수입 관련된 항목들이,지출
을 선택하면 종류에 지출 관련된 항목들이 나옵니다.금액
과내용
입력 input저장하기
버튼닫기
버튼심화 과제
웨비의 사진관 😋
이미지
3줄 이상인 설명은 말줄임표 처리와, 더보기 버튼이 나타납니다.
더보기 클릭시 설명이 모두 보입니다.
→ 설명은 넘치지 않도록 넣어주세요!
preview section
가계부 💸
리스트 삭제 모달
x
버튼 클릭시 삭제 모달이 나타납니다.→
예
클릭시 삭제를 진행합니다.→
취소
클릭시 모달이 사라집니다.리스트 추가
alert
를 띄워 막습니다.alert
를 띄워 막습니다.모달 백그라운드 & 애니메이션 (삭제, 추가)
+
클릭시 추가 모달이 아래에서 위로 올라옵니다.카테고리 추가
Enter
키를 누르면 카테고리가 추가됩니다.금액
,
로 표시됩니다. (나의 자산, 총수입/지출, 내역 리스트, 리스트 추가 input)생각 과제
명령형 프로그래밍과 선언형 프로그래밍에 대하여 여러분의 생각을 마음껏 작성해주세요
💎 PR Point
웨비의 사진관 😋
=> 각 이미지들을
querySelectorAll
로 받아와서,forEach
에서 각 제목과 설명을 삽입하였습니다.심화 1번
=> 각 콘텐츠의 height를 측정하여, 설명의 높이가 더 크면 더보기 버튼을 넣었고, 버튼을 클릭하면 버튼이 사라지고 (
style.display = "none"
) 설명이 보이도록 구현하였습니다.기본 2번, 심화2번은 pr point 생략
가계부 💸
기본 pr point 생략
심화 2번 (b)
-> 간단할 줄 알았는데,,, 이렇게 하는 게 맞나요,,?ㅠ
심화 1번 + 기본 4번
-> 진짜,,, 그 더하고 빼고 반영해야 하는 것 때문에 구글링 많이 하고 애먹었습니다..
심화 4번(일부)
-> 이 함수 구현한 게 제일 뿌듯해영 ><
🥺 소요 시간, 어려웠던 점
8h~9h
🌈 구현 결과물
웨비의 사진관 😋
https://github.com/DO-SOPT-WEB/HyeinKwon/assets/100409061/0a589986-146d-491b-955d-042b178abea4
기본1+심화1,2
https://github.com/DO-SOPT-WEB/HyeinKwon/assets/100409061/9a0cbcdc-e0f9-492e-9b60-9b719cae85dd
기본2 (top 버튼이 동영상 재생 버튼에 가려져 있어서,,, 마우스 치워주시구(?) 봐주시면 감사하겠습니다요,,)
가계부 💸
기본 1, 2 최초 화면
https://github.com/DO-SOPT-WEB/HyeinKwon/assets/100409061/b02d03f8-e3cb-46ad-a079-db37c4aa6b17
기본 3 (수입, 지출 필터링)
https://github.com/DO-SOPT-WEB/HyeinKwon/assets/100409061/74e3767d-26a3-484f-b036-01081976575b
기본 4 + 심화 1 (리스트 삭제)
https://github.com/DO-SOPT-WEB/HyeinKwon/assets/100409061/c4d196c6-d73c-47ee-8ca2-6d9f839aac86
심화 3 + 심화 4
https://github.com/DO-SOPT-WEB/HyeinKwon/assets/100409061/9e95d8c2-f733-48a2-a376-a56b2c31edf9
기본5 + 심화2 + 심화5