woowacourse-teams / 2022-gong-seek

공식(공유해줘 너의 지식) : 우테코 크루들을 위한 질문 게시판
https://gongseek.site
60 stars 5 forks source link

carousel ui를 변경한다. + 홈페이지의 접근성을 향상한다. #786

Closed hwangstar156 closed 2 years ago

hwangstar156 commented 2 years ago

close #657 close #785

캐러셀 변경

기존 캐러셀

기존 carousel

데스크탑 ui

데스크탑 캐러셀 - pr

모바일 ui

모바일 캐러셀 - pr2

scroll기반 캐러셀

캐러셀을 구현하는것으로 transform으로 이동하기, scroll로 이동하기 크게 2개가 존재하는데 이번엔 scroll로 이동하기를 선택하였습니다.

scroll-snap-type: x madatory, scroll-snap-align: center 옵션을 동시에 설정하여 스크롤이 중간이상 넘어가게 된다면 모두 중앙으로 정렬되도록 하였습니다.

스크롤을 이동시킬때는 scrollTo, scrollBy를 이용하여 이동시켰습니다.

useCarousel

useCarousel로 캐러셀을 움직이는 로직을 담았는데 처리해야되는 로직이 많아져서 밑에 추가 설명 작성하겠습니다!

resize될때마다 변하는 크기 관리

현재 반응형 캐러셀을 이용하고 있기에 resize가 될때마다 다시 이동해야할 스크롤 너비를 계산하는 로직을 담았습니다.

너무 빠르게 resize를 하게될시 현재 resize된 창의 너비가 아니라 지난 창의 너비가 반영되는 문제가 있어 debounce를 걸어서 마지막 resize후 일정시간동안 resize를 하지 않으면 그때 너비를 계산하는 로직을 작성하였습니다.

브라우저에서 blur될때 setState막기

브라우저에서 화면 포커싱을 다른곳으로 가져가면 scroll은 되지않지만 setState는 되는 문제가 있었습니다. 현재 3초에 한번 currentIndex를 setState한후 state가 변하면 그것에 따라 스크롤을 움직이는데 setState는 되지만 스크롤이 움직이지 않아 active가 이상하게 발생하는 문제가 있었습니다.

window에 blue, focus 이벤트를 걸어 blur될시 setState를 막고, focus하면 다시 활성화하는 식으로 구현하였습니다.

스크롤 되는 도중에는 이동 못하도록 막기

현재 스크롤이 smooth 옵션으로 인해 부드럽게 넘어가게 되는데 스크롤이 이동하는 도중에 계속 다음버튼을 누를시 포커싱이 이상해지는 문제가 발생하였습니다.

해결방법으로 isScroll라는 state로 스크롤이 진행중일때는 다음, 이전 버튼을 눌러도 반응하지 않도록 구현하였습니다.

홈페이지 웹접근성 향상

개선전

스크린샷 2022-10-18 오후 1 32 56

개선후

스크린샷 2022-10-18 오후 1 33 19

개선 방법

키보드로만 이용할 수 있게 하기

aria와 role이 맞도록 하기

img에 alt 넣기

# 를 파운드 기호로 읽는다.

링크 및 버튼에는 접근가능한 이름이 존재해야함.

현재 검색 돋보기 버튼, 이전 화살표 버튼, 다음 화살표 버튼등에 접근가능한 이름(텍스트)가 없어서 aria-label로 텍스트 부여

input과 label을 연결

toLocalString으로 숫자를 붙혀서 읽을 수 있도록 설정

liswktjs commented 2 years ago

충돌 해결해주세요~