
📍 진행상황
🧷 랜딩페이지 웹, 모바일 버전 화면 작업 진행 👉🏻 7of7 진행 완료
◾ <p> 태그 줄바꿈 적용 방식 조정
◾ 카카오 API를 통해 마커 및 맵 레벨 초기화 기능 추가, 아이콘 변경
◾ 구독하기 버튼의 웹과 모바일 화면 간 위치 조정
◾ 이메일 입력 후 버튼 클릭 시 모달창 띄우기 및 유효성 검사
◾ 헤더 사이드 메뉴바 작업
◾ 레이아웃 전체 세밀 조정
📌 개발 완료 부분 시연 영상
✅ 레이아웃의 간격, 요소의 크기 등을 피그마 디자인 파일과 일치하도록 조정했습니다.
추가로, 텍스트와 이미지의 배치도 최적화하였습니다.
✅ 웹에서는 <br> 태그에 `display: none`을 적용하여 줄바꿈을 숨기고,
모바일에서는 `display: flex`를 적용하여 줄바꿈을 표시했습니다.
📁 카카오맵 API 사용과 예제
◾카카오 API를 사용할 수 있는 방법으로는 공식 홈페이지에서
로그인을 하고 개인 API 키를 발급을 받은 다음에 진행을 할 수 있습니다.




왼쪽의 이미지는 카카오 자체에서 제공해주는 샘플 예제입니다.
이 예제를 활용해서 오른쪽과 같이 화면을 구현했습니다.
자바스크립트를 활용해서 맵의 레벨과 마커를 초기화할 수 있는 기능을 추가하였습니다.
📁 이메일 유효성 검사


❗OK! 버튼 클릭시 화면 최상단으로 올라가는 현상이 있기 때문에 고칠 예정입니다.
📁 relative, absolute으로 포지션 이동하기


1️⃣ position이동
처음에 피그마에서 이미지를 보는데 도대체 저 버튼은 어떻게 구현할까? 라는 생각이 들었습니다.
👉🏻 찾아보니 `position` 속성을 이용하면 원래 위치 혹은 부모 요소를 기준으로 배치할 수 있기 때문에
화면을 조절해도 의도한 위치에 고정시킬 수 있습니다.
2️⃣ 이메일 입력창
직사각형에 `border-radius` 값을 주고 그 위에 `input` 창을 구현하였습니다.
✔️ 그러나 이전에 input을 이용하여 border-radius 값을 주어서
로그인 화면을 만들었던 경험이 있어 이미지만 배치할 수 있는 방법을 알아낸다면
화면과 같이 또 다른 방법으로도 개발해보려합니다.
📁 메뉴바 펼치기(사이드 메뉴)

오늘 가장 애먹었던 부분인데요! 코드가 자꾸 에러가 나서 if ~ else 문으로 어느 부분에서 오류가 나는지
확인을 해보니 메뉴 펼치기 버튼은 제대로 작동을 하고 있는데 다른 요소에 가려져서 안 보인다는 것을 알았습니다.
`z-index` 를 이용해서 이 문제를 해결해주었습니다.
⭐ 코드리뷰➰카카오맵, 이메일 유효성 검사, 사이드 메뉴
✅ 카카오맵 API
[🥸JavaScript]📝카카오 지도 API 사용법과 키 숨기기(gitignore )➰랜딩 페이지
📍 진행상황 1️⃣ 카카오 API 키 값 숨기기 2️⃣ 이메일 입력 창 디자인 개선 📌 개발 완료 부분 시연 영상전체적인 레이아웃과 스타일, 기능 등 얼추 완성이 되었으니 이제 더욱 완성도 있게
we-health.tistory.com
✅ 이메일 유효성 검사
이메일 입력 필드를 검증하고, 입력값이 비어 있거나 유효한 이메일 형식이 아닌 경우에 경고를 표시하도록 구현했습니다.
<script>
// 이메일 유효성 검사(정규표현식)
function validateEmail(email) {
const pattern = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;
return pattern.test(email); // 패턴이 입력한 문자열과 일치하는지 확인
}
// 입력값이 올바른지 체크
function inputCheck() {
const emailInput = document.getElementById('emailInput');
const email = emailInput.value.trim(); // 양쪽 공백 제거
if (!email || !validateEmail(email)) { // 빈 문자열이거나 이메일 형식이 유효하지 않은 경우
alert('입력란이 공백이거나 이메일 주소가 유효하지 않습니다.');
return false;
}
return true;
}
// 유효성 검사 진행 문제 없을 시 모달창 열림
function showModal(event) {
event.preventDefault(); // 기본 동작을 방지
if (inputCheck()) { // 입력값이 유효한 경우
document.getElementById('modal').style.display = 'flex'; // 모달 표시
}
}
// OK 버튼 클릭시 모달창 닫힘
function closeModal(event) {
event.preventDefault(); // 기본 동작을 방지
document.getElementById('modal').style.display = 'none'; // 모달 숨기기
}
// 폼 제출 후 모달창 닫힘
function confirmSubscription(event) {
event.preventDefault(); // 기본 동작을 방지
document.querySelector('.form-container').submit(); // 폼 제출
closeModal(event); // 모달 닫기
}
// 이벤트 리스너를 설정
document.querySelector('.subscribeButton').addEventListener('click', showModal);
document.querySelector('.modalButton').addEventListener('click', closeModal);
document.getElementById('modalConfirmButton').addEventListener('click', confirmSubscription);
</script>
✅ 헤더 사이드 메뉴
<script>
document.addEventListener('DOMContentLoaded', function() {
const menuOpenButton = document.querySelector('.menuOpenButton');
const menuCloseButton = document.querySelector('.menuCloseButton');
const menu = document.querySelector('.menu');
// translateX의 초기값 100%에서 0으로 변경, 메뉴를 화면으로 보이게함
menuOpenButton.addEventListener('click', function() {
menu.classList.add('open');
});
// translateX의 변경값을 제거, 화면 밖으로 나가게 되어 메뉴가 닫히는 것처럼 보임
menuCloseButton.addEventListener('click', function() {
menu.classList.remove('open');
});
});
</script>
⭐ 사이드 메뉴의 핵심은 CSS에 메뉴창이 열릴 수 있도록 새로운 클래스를 추가해
`translateX()`를 사용해서 사이드바가 움직일 수 있도록 해주는겁니다.
transform: translateX(100%); /* 메뉴를 화면에 보이지 않도록 오른쪽 밖에 위치 */
transform: translateX(0); /* 메뉴가 보일 수 있도록 X 값이 이동 */
오른쪽 화면에서 왼쪽 방향으로 사이드 메뉴가 나타나게끔 해주었는데요.
따라서 X 값을 이용하면 되고 위에서 아래로 나타나는
메뉴를 만들고 싶다면 `translateY()` 값을 이용하시면 되겠습니다.
📝 11일차 부트캠프 회고
1️⃣ 잘했던 점
카카오맵 API와 이메일 유효성 검사를 이용하는 등 다양한 기술 요소를 통합하여 개발을 진행하였고, 레이아웃과 요소의 크기를 피그마와 맞춰 사용자 경험을 향상시켰습니다.
2️⃣ 부족했던 점
개인적으로 relative, absolute 값을 이용해서 버튼의 배치를 부모 요소와 붙어있으면서 움직이도록 하는 것이 어려웠습니다.
3️⃣ 향후 개선 방향
버튼 배치와 레이아웃 조정에 대한 이해도를 높이기 위해 관련 자료 더 찾아보고
카카오맵 API에서 발급받은 키를 숨기기 위한 방법을 찾아보려 합니다.
'🖥️ JavaScript' 카테고리의 다른 글
💬 끄적이는 5일차 랜딩페이지 프로젝트 회고 (0) | 2024.08.23 |
---|---|
[🥸JavaScript]📝카카오 지도 API 사용법과 키 숨기기(gitignore )➰랜딩 페이지 (1) | 2024.08.22 |
[🥸JavaScript]📝 this 호출방식과 사용법, JSON 개념➰(parse, stringify) (0) | 2024.08.14 |
[🥸JavaScript]📝콜백함수, 배열함수, 메서드 정리➰(foreach, map) (2) | 2024.08.13 |
[🥸JavaScript]📝자바스크립트 변수 선언, 타입, 연산자➰(let, const) (0) | 2024.08.12 |