[Solo Project]

jeongjwon·2023년 3월 10일
0

Project

목록 보기
1/8

🏛️ 아고라 스테이츠 만들기

Bare Minimum 을 진행하다가 머릿속에서 해야할 일들이 많아 복잡해져서 간단히 디자인 설계를 다시 해보았다. 이렇게 진행을 하니 해야할 것들이 나열이 되면서 작업하기가 전보다 편리해졌다.
그치만, 기능을 구현하는 함수를 한 개만 해야하는 것이 아니라 종합적으로 이어지다보니 어려웠다.




🧩 기능 구현

  1. rendering 하기
  • notice, non-notice discussions 분류하기
    로컬 스토리지에서 데이터를 배열로 불러와 filter 메서드로 author 를 구분하여 분류하였다(seperateDiscussion 함수)
  • pagination 하기
    • discussions 을 분류하면서 모든 discussion 의 개수를 이용하여 페이지 버튼을 만든다.
    • 현재 페이지를 이용하여 범위(10개 페이지네이션일 경우, 1페이지 : 0 ~ 10 , 2페이지 : 10 ~ 20 등 )를 파악한다. ( setCurrentPage 함수 )
      => notice , non-notice , 페이지 범위 를 통해 한 페이지에 나열해야 할 discussion 을 렌더링한다.
    • 해당 페이지 버튼들을 클릭할 때의 이벤트 리스너를 통해서 다시 rendering 한고 버튼을 active 시키고 현재 페이지가 바뀔 때 마다 이전, 다음 페이지를 다시 설정해준다.

      rendering 부분
      이 부분에서 innerHTML 을 초기화시켜주어야 한다.
      그렇지 않으면 항상 submit 할 때 마다 모든 배열이 몇 번이고 중복이 되어 나열된다.


  1. discussion submit 했을 때, discussion 나열하기 - 로컬 스토리지 연결
  • form 의 submit 이벤트 리스너를 통해 ... 을 이용하여 새로운 배열을 만들어준 후 이것을 로컬 스토리지에 저장을 해준다. 로컬스토리지는 JSON 문자열을 이용하므로 JSON.parse() 와 JSON.stringfy()를 이용한다. => null 일 경우를 위해 빈 배열 처리를 해주어야 한다.
  1. notice container 에 토글 버튼 작동시키기
    토글 닫기 버튼 클릭시 해당 notice discussions 들이 숨겨지게 클래스명 disabled 를 설정해준다.

  2. Top 버튼 기능 구현하기

  • window 객체의 pageYOffset 을 이용하여 스크롤을 할 경우에 Top 버튼이 나타나게 클래스명 disabled 을 설정해준다.
  • Top 버튼 클릭시 window 객체가 맨 위로 부드럽게 스크롤하게 설정해준다.
  1. discussion 날짜별로 구분지어 표현하기
    현재 날짜 시각과 해당 데이터의 날짜 시각의 차이를 이용하여
    같은 날짜인 경우에는 0~59초, 1~59분, 1~23시간으로 구분하여 -초 전, -분 전, -시간 전으로,
    일주일 차이인 경우에는 -일 전으로, 그 외에는 yyyy-mm-dd 로 표현되게 하였다.

  2. discussion 제목을 한 줄로 표현
    over-flow:hidden; text-overflow: ellipsis; white-space: nowrap; 을 이용하여 ...로 표현되게 한다.

  3. text search 기능
    notice 분류하는 작업처럼 filter 메소드를 사용하여 분류하는 함수까지는 구현했으나, 이를 가지고 rendering 하는 작업이 아직 어려워서 구현하지 못하였다.




아직까지 미숙한 부분이 많고 연결되는 것들이 얽혀있어서 더 어렵게 느껴진다.
코딩하기 전에 먼저 설계디자인을 머릿 속으로 하지말고 눈에 보이게 하자!
기능적요소도 중요하지만 사람의 이목을 집중시키는 것은 UX이니 css 디자인요소 레퍼런스를 많이 보고 참고해보자!

0개의 댓글