본문 바로가기

[스쿼드 2주차]스와이프 배너와 슬라이드 메뉴창

by Jyujae 2022. 8. 27.

1. Project 진행조건

-- 배너창입니다. 단, 보편적으로 화살표나 아래 점들로 구성되어 칸 구분이 되어 있는 배너창이 아닌, 수동(모바일 상에서 드래그)으로 좌우로 움직이고, 다시 탭을 해야 멈추는 그러한 형태입니다.

즉, 위아래 스크롤과 유사하지만, 이것을 좌우로 구현하는 부분입니다.

https://doqtqu.tistory.com/25 위 레퍼런스에 가보시면, 한 번의 액션으로 다음 슬라이드로 넘어가는 창이 나오는데, 이번에 개발하는 것은, 그 각각의 창에 대한 구분 기준이 없는, 다시 손을 댈 때 멈추는 그러한 좌우 슬라이드 입니다.

  • 또한 강하게(혹은 길게) 드래그 액션을 취할 떄는 더 많이 좌우로 움직이고,
  • 상대적으로 약할 때는 그 움직임의 정도가 약해집니다.

-- 좌우 슬라이드 메뉴 창입니다.

메뉴가 좌우 슬라이드와 연계되어 진행됩니다.**

  1. 상단 메뉴가 고정되어 있고(아래 칸과 연계)
  2. 하단의 해당 내용이, 그 상단 메뉴의 하이어라키 안에서
  3. 좌우로, 움직일 수 있습니다. (3개 한정)

 

2. 결과물

https://example2-f6bce.web.app/

pc버전
모바일 버전

 

제시 조건의 요구사항을 제대로 파악하지 못한 점이 아쉬웠고, 이 때문에 너무 많은 시간을 소요한 것이 화가 났다...

 

3. 코드

1. 가로 스크롤 배너

배너 html
배너 css
배너 css

웹 모바일 모두 신경을 써야했기 때문에, 생각보다 고민이 많이 들었다.

처음에는 다양한 swipe api 를 사용했지만, 배너의  창 구분을 없애는 것이 힘들었고, javascript로 작성시 비효율적이라

판단하고, 기본적인 css에 집중하기로 했다.

배너 자체를 wrapper div를 만들어 안에 모두 넣었고, overflow: scroll로 설정해서 자연스레 넘치는 배너들은 scroll로 통제하고, 모바일에서는 swipe로 통제가 가능해졌다.
Wrapper div자체의 노출 크기를 조절하여 원하는 만큼 노출이 가능해졌고, 칸 구별이 없는 배너를 완성시킬 수 있었다.

배너와 스와이프 자체에 너무 집중한 나머지 

 

생각보다 해답은 간단했다. overflow: scroll로 해당시켜두고, weap-vertical의 width를 지정해주었다.

지정된 70%의 너비 안에서 넘어가는 p 태그들을 pc에서는 스크롤 바를 통해, 모바일에서는 스와이프를 통해서

'끊기지 않게' 컨트롤할 수 있는 banner를 만들 수 있었다.

 

2. 좌우 슬라이드 메뉴창

상단 메뉴가 고정되어 있고, 하단의 내용이 상단 메뉴의 하이어라키 안에서 좌우로 움직일 수 있는 요구사항이었다.

먼저 설정된 만큼 슬라이드 + 좌우로 움직이는 content를 담을 칸을 만들어야 했다.

글을 쓸 칸 을 3개를 만들고, 이 칸들의 이동도 설정해야 했고, swiper 라는 api를 선택했다.

글을 담 는 칸 자체를 배너처럼 설정하여 사용자들의 접근성을 향상시키고, 디자인적 요소들을 개선할 수 있었다.
 
두 번째, 하단의 내용이 바뀔 때, 사용자에게 바뀌었다는 사인을 주어야 했다.

몇 번째 페이지에 있는지 페이지 이동 시 알려주어야 했는데, swiper 내부 기능을 쓰려다가 요구사항과 안 맞는다고 판단.

Swiper 기능 중 현재 보여지고 있는 페이지는 class name에 active가 append 되는 점을 참고하여 js를 활용하기로 했다. Swipe 시, active 되는 class 를 찾고, 그 class의 id를 가져와서, 상단 메뉴의 3개의 칸들과 연결했습니다. Background color를 바꿈으로써 사용자에게 정보를 전달했다

 

텍스트를 제외하면

<swiper mySwiper>

<swiper-wrapper  id= targetid>

<swiper-slide id=slide1>

<swiper-slide id=slide2>

<swiper-slide id=slide3>

 

이렇게 div를 구성했다

swiper 기본 js

swiper 기본 api js로 기본 틀을 구성하고,

js 코드로 변화감지 함수인 mutations를 활용, 자식들의 classname을 가져온다

그 classname 중에 원하는 값을 active로 만들어주고(미리 삭제해주는 이유는 중첩을 막기 위해서다)

css로 background color 만 바꿔주었다(default로 slide1을 active로 설정해주었다)

살짝 꼼수느낌이 나지만, 미션을 클리어였다!!!

 

이로서 힘들었던 스쿼드 2주차 마무리...!!!!!

 

https://github.com/JeongYujae/Startup_SQUAD