자동 재생(Auto-Play) 시에는 '콘텐츠 더보기' 카드를 숨기고 1위~10위 콘텐츠만 무한 반복하며, 사용자가 수동으로 스와이프(Manual Swipe)할 때만 '콘텐츠 더보기' 카드를 노출하고 끝에서 멈추도록(Hard Stop) 제어합니다.
| 현재 상태 | 트리거 이벤트 | 시스템 동작 및 상태 변경 상세 |
|---|---|---|
| 자동 롤링 중 (1~9위 카드) |
5초 타이머 만료 |
• '콘텐츠 더보기' 카드 숨김(display: none) / 1, 2위 복제 카드 활성화(display: flex) 상태 유지.• currentIndex를 +1 증가시키고 -currentIndex * 294px 위치로 부드럽게 이동.• 9위➔10위로 이동 시, 10위 카드 우측 여백에는 '더보기'가 아닌 1위 복제 카드가 자연스럽게 노출됨. |
| 자동 롤링 중 (10위 ➔ 1위 루프) |
5초 타이머 만료 |
[10위 ➔ 1위 다이렉트 Seamless 스왑] 1) '더보기' 카드를 건너뛰고, 10위 우측에 바로 붙어있는 1위 복제 카드 위치( -10 * 294px = -2940px)로 한 칸 전진 애니메이션 실행.2) 애니메이션 종료 직후( 460ms 후), transition: none 상태에서 진짜 1위 카드 위치(0px)로 좌표를 즉시 치환(Swap).
|
| 수동 터치/드래그 시작 | 가로 포인터 이동 8px 이상 |
1) 자동 롤링 타이머 초기화(elapsedMs = 0) 및 일시 정지.2) 현재 화면에 표시된 좌표를 드래그 시작점으로 삼고, 복제 카드(Clone)를 숨긴 뒤, 11번째 '콘텐츠 더보기' 카드를 활성화( display: flex).3) 이를 통해 사용자가 수동으로 스와이프할 때는 10위 우측에 '콘텐츠 더보기' 카드가 나타나도록 전환. |
| 수동 드래그 중 | pointermove |
손가락/마우스 이동 거리(diff)만큼 실시간 트랙 이동.• 양끝 저항감(Resistance): 1위 카드 좌측( > 0px) 또는 11번째 '더보기' 카드 우측(< -2940px)으로 넘어갈 경우 이동량의 25%만 반영하여 끝임을 직관적으로 전달.
|
| 수동 터치/드래그 종료 | pointerup / pointercancel |
일반 드래그는 가장 가까운 카드로 스냅합니다. 24px 이상 움직이고 평균 속도가 0.35px/ms 이상이면 시작 카드 기준으로 한 장 이동합니다. • 1~10위 카드( Index 0~9)에 안착 시: 수동 모드를 유지해 10위 오른쪽에 더보기가 보이도록 합니다. 조작이 끝나고 5초가 지나면 자동 롤링을 재개합니다.• 11번째 '더보기' 카드( Index 10)에 안착 시: 사용자가 '더보기' 버튼을 누를 수 있도록 '더보기' 카드 노출을 유지하고 더보기에 머무는 동안 자동 롤링 정지(isStoppedAtEndByUser = true).
|
자동 롤링이 계속 오른쪽으로 넘어간다고 해서 매 주기마다 카드가 10개씩 무한 복제(appendChild)되어 쌓이는 구조가 아닙니다. 프론트엔드 표준 '착시 스왑(Illusion Swap)' 기법을 사용하여 메모리는 항상 고정된 상태를 유지합니다.
-2646px)에서 1위 복제본(-2940px)으로 부드럽게 이동한 직후, 애니메이션을 끄고(transition: none) 진짜 1위 카드(0px)로 좌표를 순간이동시킵니다. UI가 100% 동일하므로 사용자는 눈치채지 못합니다.document.visibilitychange 이벤트 발생 시 타이머를 일시 정지하고, 화면 복귀 시 카운트를 재시작합니다.
loop: true 옵션은 모든 슬라이드(더보기 포함)를 무조건 회전시키므로, "자동일 때는 더보기 숨김 + 1~10위 루프 / 수동일 때는 더보기 노출 + 끝에서 정지" 로직을 기본 옵션만으로는 구현할 수 없습니다.loop: false 환경에서 위 명세서와 같이 more-card와 clone-card의 CSS 노출 상태(display)를 가로 스와이프 판정에 맞춰 토글하는 커스텀 제어 방식을 권장합니다.