- 학습 목표 1 : 프론트엔드 JS 코드 작성 - 게시글 상세조회 Event
- 학습 목표 2 : 커뮤니티 레이아웃 - 게시글 상세조회 CSS 추가
commentContainer.addEventListener('click', (event) => {
const target = event.target;
// 댓글 수정
if (target.classList.contains('edit-comment-button')) {}
// 댓글 삭제
if (target.classList.contains('delete-comment-button')) {}
});
- 이벤트 위임을 활용, 부모 요소에 이벤트 리스너를 한번만 등록하고 그 이벤트가 하위 요소에서 발생할 때 이를 처리
- 댓글 수정/삭제 버튼이 동적으로 생성되기 떄문에 이벤트 위임을 사용해서 부모 요소인 해당 컨테이너에서 처리하게함
// 댓글 삭제
if (target.classList.contains('delete-comment-button')) {
...
// 댓글 삭제 모달 확인 버튼 클릭 시
commentConfirmButton.addEventListener('click', () => {
...
closeModal(deleteCommentModal);
}, { once: true });
}
// 댓글 삭제 모달 취소 버튼 클릭 시
commentCancelButton.addEventListener('click', () => {
closeModal(deleteCommentModal);
});
- 댓글은 여러개 생성될 수 있으며 댓글 삭제 버튼이 클릭될 떄 어떤 댓글을 삭제해야하는 지 알아야하기 때문에, 삭제 버튼 클릭 시 이벤트를 기준으로 해당 댓글을 처리하기 위해 댓글 삭제 모달 확인 이벤트는 댓글 삭제 이벤트 내에 위치
commentConfirmButton.addEventListener('click', () => {
...
}, {once:true});
- once:true는 이벤트 리스너가 한 번 실행된 후 자동으로 제거되도록 설정하는 옵션
- 이벤트 리스너가 중복으로 등록되어 불필요하게 여러 번 실행되는 것을 방지
- 모달을 닫고 다시 열었을 때 기존 이벤트 리스너가 중복 등록될 위험이 있음을 방지 (댓글 삭제는 동적, 모달을 열 때마다 동일한 버튼에 이벤트 리스너가 추가)
- 요소의 쌓이는 순서 결정
- 숫자가 클수록 앞, 음수 값도 가능
- positon 속성이 relative, absolute, fixed, sticky일 때만 작동
- auto (기본값): 부모 요소의 쌓임 순서를 따름
- 숫자 값: 0, 10, 100 등이 많이 사용되고 보통 상대적 계층 구조 표현을 위해 사용 (비교가 중요하므로 불필요하게 큰 값은 권장 안하나, 9999 같이 값이 크면 암묵적으로 항상 맨 위로 표시 의미)
- inline: 줄바꿈 없이 컨텐츠만큼만 너비를 차지.
- block: 줄바꿈이 일어나고 전체 너비를 차지
- inline-block: 줄바꿈 없이 블록처럼 동작
- flex: 플렉스 컨테이너로 설정
- grid: 그리드 컨테이너로 설정
- none: 요소를 화면에서 숨김
- visible (기본값): 초과된 콘텐츠를 그대로 보여줌
- hidden: 초과된 콘텐츠를 숨김, 스크롤 불가능
- scroll: 스크롤바를 항상 표시하여 초과 콘텐츠를 스크롤 가능
- auto: 필요할 때만 스크롤바를 표시
- translate(x, y): 지정한 x, y만큼 이동
- translate(-50%, -50%)는 요소를 자신 크기를 기준으로 수평 및 수직 방향으로 각각 50% 이동, 주로 요소를 부모 기준으로 화면의 중앙에 위치시키기 위해 사용
- scale(x, y): 요소를 x, y 비율로 확대/축소
- rotate(deg): 요소를 지정된 각도(degrees)만큼 회전
- 도전 과제 1: 프론트엔드 JS 코드 작성 - 게시글 상세조회 Event
- 도전 과제 2: Event 코드 추가에 따른 html, css 코드 추가
- 코드는 한번 작성한다고 해결되는 것이 아니라 후에 작성하며 다른 코드들이 추가되는 경향이 있으므로 한번에 너무 완벽한 코드를 작성해야겠다는 부담을 덜어야겠다고 생각했다.