Next.js로 메모 작성 앱 만들기 – 3

사이드바 닫기

Notion에서 Resizer를 클릭하여 사이드바를 닫을 수 있습니다.


드래그와 클릭의 차이점

Resizer의 클릭 이벤트에서 사이드바를 닫을 수 있습니다.

const resizerClickHandler = (event: React.MouseEvent) => {
    // 드래그
    if (beforeCoordX.current !== event.clientX) {
        return;
    }
    // 클릭
    sidebarRef.current!.style.width = "0px";
    sidebarRef.current!.style.opacity = "0";
    sidebarRef.current!.style.transform = "perspective(400px) rotateY(90deg)"
}

이때 리사이저가 드래그인지 클릭인지 구분이 필요하다.

드래그하면 사이드바의 크기가 조정되고 클릭하면 사이드바가 닫힙니다.

마우스 이벤트 mousedown, mouseup, click 순차적으로 발생합니다.

이것을 구별하기 위해 resizerMouseDownHandler먼저 x 좌표(beforeCoordX) 클릭 이벤트의 x 좌표와 비교합니다.

다르면 드래그하고 있음을 알 수 있습니다.

관점

사이드바를 닫으려면 CSS transition 속성을 사용할 수 있습니다.

이때 perspective아래 그림과 같이 사이드바가 안쪽으로 닫히는 효과를 적용하였습니다.


width0으로 주는 rotateY90도로 설정하면 접을수록 점점 작아지는 트랜지션 효과를 적용할 수 있습니다.

SVG 추가

아이콘을 추가하기 위해 svg 파일을 추가하기로 했습니다.

svg를 만드는 방법에는 여러 가지가 있지만 저는 크게 두 가지 방법을 생각해 냈습니다.

  1. 피그마 사용법

피그마지금은 매우 유명한 디자인 도구이고 학교에서 팀 프로젝트를 위해 한동안 사용했지만 아직 익숙하지 않아서 다른 방법을 찾았습니다.

  1. 무료 svg 아이콘 사용

나는 찾았다 부트스트랩svg 아이콘은 무료로 제공됩니다.

나중에 별도의 svg를 만들어야 한다면 Figma를 사용하겠습니다.

부트스트랩에서 제공하는 아이콘의 퀄리티가 상당히 좋은데 이 정도면 충분하다고 생각해서 사용하기로 했습니다.

중간점검


아직 사이드바에 추가할 기능이 많이 있지만 잠시 미루겠습니다.

필기 앱의 핵심인 필기 기능을 구현하기로 했습니다.

글을 쓰려면 간략히 contentEditable 속성을 사용하여 div에 쓸 수 있습니다.

그러나 마크다운 기능을 적용하기 위해서는 입력한 마크다운을 파싱하고 스타일을 적용한 후 DOM에 추가해야 하는 번거로움이 매우 크다.

그래서 우선 메타의 오픈소스 어휘코드 구조를 조금씩 참고해서 살펴보고 다시 판단해야 할 것 같습니다.