Archive

2021-03-20 TIL

|

2021-03-20 TIL


  • 오늘 한 것
    1. 인터렉티브 웹 개발
    2. 회원가입 약관 및 회원가입 폼 구현 - 회원가입, 로그인 기능을 최우선적으로 개발해야 다음 스텝으로 나아갈 수 있기 때문에 그에 맞춰 내가 맡은 화면을 구현하는 작업을 진행했다. 나는 회원가입 약관과 회원가입 폼을 그리는 역할을 맡았는데 유효성 검사 이외에는 특별히 어려운 부분은 없었다. 다음에 정규 표현식에 대해 제대로 공부를 해야겠다는 생각이 들었다..



  • 내일 할 것
    1. 인터렉티브 웹 개발
    2. 관리자 메인 페이지 화면 구도 잡기
    3. 가족 식사



  • 끝으로

내일은 가족모임

오늘의 한 줄 총평 : 하나 둘 차근차근 만들다보면..


2021-03-19 TIL - 2차 팀 프로젝트 회의

|

2021-03-19 TIL - 2차 팀 프로젝트 회의


  • 오늘 한 것
    1. 인터렉티브 웹 개발
    2. 학원 대면 수업(15:30~22:00)
    3. 팀 프로젝트 세부페이지 목업 및 요구사항 세부 정의 - 조금 일찍 모여서 지난번에 하던 요구사항 세부 정의를 이어서 하고 관리자 페이지에 들어가야하는 목록들을 나열해보았다. 다음 회의때는 본격적으로 데이터베이스 설계에 들어간다. 스토리보드는 프론트단에서 세부 페이지 작업을 하면서 그려나가야겠다.
    4. 메인 페이지 디자인 수정 - 프론트단에서 메인 페이지의 배너 이미지에 들어가는 카피라이팅이나 수정 사항들에 대해서 회의하고 고쳐나가는 작업을 진행했다.



  • 내일 할 것
    1. 인터렉티브 웹 개발
    2. 회원가입 약관, 회원가입 폼 화면 구현



  • 끝으로

메인 페이지가 나왔으니 이걸 토대로 세부 페이지도 하나 둘 그려나가는 작업을 진행해야겠다.

오늘의 한 줄 총평 : 주말동안 화면 그리기


2021-03-18 TIL

|

2021-03-18 TIL


  • 오늘 한 것
    1. 인터렉티브 웹 개발
    2. 학원 대면 수업(15:30~22:00)
    3. 팀 프로젝트 세부페이지 목업 및 요구사항 세부 정의 - 세부 페이지 목업 스케치를 대강 해봤지만 시간이 부족한 관계로 내일 아침 일찍 모이기로 했다.
    4. 카카오맵 api 이용한 지도 구현 - 이전에 코로나 확진자 통계 SPA를 간단히 만들면서 카카오맵 api를 이용해 지도를 화면에 찍어내는것은 해봤었다. (비록 그 이상은 아니었지만) 이번에는 조금 더 로직이 들어간 지도를 그려보기로 했다. 내 주변 위치를 검색해서 주변에 있는 투썸플레이스만 화면에 찍어낼 것. 그리고 화면을 이동시키면 당연히 검색 결과 목록도 바뀐다. 어찌어찌 성공은 했지만 밤을 새고 6시에 잘 수 있었다..



  • 내일 할 것
    1. 인터렉티브 웹 개발
    2. 학원 대면 수업(15:30~22:00)
    3. 팀 프로젝트 세부페이지 목업 및 요구사항 세부 정의
    4. 메인 페이지 및 세부 페이지 디자인 작업



  • 끝으로

재밌지만 한 번 집중하면 시간가는 줄 모르고 주변을 잘 못보는것 같다..

오늘의 한 줄 총평 : 지도 구현 성공


2021-03-17 TIL

|

2021-03-17 TIL


  • 오늘 한 것
    1. 인터렉티브 웹 개발
    2. 학원 대면 수업(15:30~22:00)
    3. 팀 프로젝트 세부페이지 목업 및 요구사항 세부 정의 - 조장님이 병가를 낸 관계로 팀 회의는 무산되었지만 나와 같이 프론트엔드 파트를 담당하고 있는 조원님의 메인 페이지 디자인 작업에 참여해서 여러 의견을 공유하는 시간을 가졌다.
    4. 바닐라 자바스크립트 이미지 슬라이드 구현 - 좋은 플러그인을 사용하면 간단하게 이미지 슬라이드를 구현할 수 있겠지만 우선, 제이쿼리는 쓰지 않기로 했기에 바닐라 자바스크립트로 슬라이드를 구현하고자 했다. 원리는 알았지만 코딩에서 어려움을 겪어.. 결국 구글신의 도움을 받았다. 또, 한가지 문제는 무한 슬라이드를 구현하는 것인데 이건 기본 슬라이드보다 배로 어렵다. 다른 사람이 짠 코드를 하나하나 뜯어서 분석해봐야겠다.



  • 내일 할 것
    1. 인터렉티브 웹 개발
    2. 학원 대면 수업(15:30~22:00)
    3. 팀 프로젝트 세부페이지 목업 및 요구사항 세부 정의
    4. 포트폴리오 겸 연습용 웹 사이트 구상



  • 끝으로

실무에서도 플러그인을 사용하는지, 아니면 직접 구현을 하는 경우가 많은지 알아봐야겠다.

오늘의 한 줄 총평 : 재미난 플러그인 많이 찾았는데..


JS Day 16 이미지 슬라이드

|

JS Day 16 이미지 슬라이드


  • 이미지 슬라이드 구현하기

<div class="p3_wrapper"></div>
    <div class="p3_container">
        <ul class="p3_slider">
            <li class="p3_item"></li>
            <li class="p3_item"></li>
            <li class="p3_item"></li>
        </ul>
    </div>
    <div class="p3_btn_container">
        <a class="p3_btn prev">&#10094;</a>
        <a class="p3_btn next">&#10095;</a>
    </div>
</div>


  • ul 태그에 슬라이드 이미지가 들어갈 li 태그를 임시로 3개 배치
  • ul을 감싸는 container와 prev, next 버튼이 들어가는 container를 배치
  • 전체를 감싸는 wrapper가 있는데 자바스크립트와는 연관이 없다


.p3_wrapper {
  display: flex;
  justify-content: center;
  align-items: center;
}
.p3_container {
  width: 100vw;
  height: 100vh;
  overflow: hidden;
  position: relative;
}
.p3_slider {
  display: flex;
  position: absolute;
  list-style: none;
  width: 100vw;
  height: 100vh;
  top: 0;
  left: 0;
  padding: 0;
  transition: all 0.25s cubic-bezier(1, 0.01, 0.32, 1);
}
.p3_item {
  width: 100%;
  height: 100%;
}
.p3_btn_prev {
  font-size: 100px;
  cursor: pointer;
  position: absolute;
  top: 50%;
  left: 20px;
}
.p3_btn_next {
  font-size: 100px;
  cursor: pointer;
  position: absolute;
  top: 50%;
  right: 50px;
}


  • 3개의 가로로 연결되는 슬라이드 이미지를 배치하고 뷰포트와 각각의 슬라이드의 크기는 화면의 전체크기와 같다


const slideWrapper = document.querySelector('.p3_container');
const slides = document.querySelectorAll('.p3_item');
const slider = document.querySelector('.p3_slider');
const nextBtn = document.querySelector('.p3_btn_next');
const prevBtn = document.querySelector('.p3_btn_prev');

// 슬라이드의 배경색, 서버에서 데이터를 받아올 경우
// 이처럼 json의 이미지를 배열로 받아온다
const colors = ['green', 'white', 'yellow'];

// item 요소들 background 변경
for (let i = 0; i < slides.length; i++) {
  slides[i].style.background = colors[i];
}

// 전체 슬라이드 개수
let totalSlides = slides.length;
// 슬라이드 너비
const slideWidth = slideWrapper.clientWidth;
// 슬라이드 index
let slideIndex = 0;
// 슬라이더 크기
slider.style.width = slideWidth * totalSlides + 'px';

// index를 매개변수로 받는 showSlides 함수
const showSlides = (n) => {
  slideIndex = n;

  // 처음 슬라이드에서 prev 버튼을 누르면 마지막 슬라이드로 이동
  if (slideIndex == -1) {
    slideIndex = totalSlides - 1;
  } else if (slideIndex === totalSlides) { // 마지막 슬라이드까지 가면 초기화
    slideIndex = 0;
  }
  // 슬라이드 크기 * 인덱스만큼 밀어준다
  slider.style.left = -(slideWidth * slideIndex) + 'px';
};
// slideIndex에 n만큼 더해서 showSlides 함수를 호출
const plusSlides = (n) => {
  showSlides((slideIndex += n));
};
// 이벤트 hook
nextBtn.addEventListener('click', () => plusSlides(1));
prevBtn.addEventListener('click', () => plusSlides(-1));


  • 이렇게 코드를 작성할 경우 마지막 슬라이드에서 next 버튼을 누르면 처음으로 돌아가는 애니메이션이 매우 부자연스럽다
  • 자연스러운 전환을 위해서는 1번 슬라이드를 마지막 슬라이드 뒤에 붙이고 마찬가지로 마지막 슬라이드를 1번 슬라이드 앞에 붙여서 해결해야한다
  • 다음 과제는 무한 슬라이드 구현이다

참고 자료


JAVASCRIPT.INFO

MDN

JavaScript - 이미지 슬라이드