.card { opacity: 0; pointer-events: none; /* 숨겨진 카드와의 상호작용 방지 */ transition: opacity .25s ease;}.card.active { opacity: 1; pointer-events: auto; /* 보이는 카드와의 상호작용 허용 */}
이것이 중요한 이유:
opacity: 0은 카드를 시각적으로 숨기지만 레이아웃에는 유지됩니다
pointer-events: none은 숨겨진 카드에 대한 실수로 인한 클릭을 방지합니다
transition은 부드러운 페이드 효과를 생성합니다
3
JavaScript 상태 관리
setActive(i) 함수가 어떤 카드가 보이는지 제어합니다:
복사
AI에게 묻기
function setActive(i) { // 카드 가시성 업데이트 document.getElementById("card-0").className = i === 0 ? "card active" : "card"; document.getElementById("card-1").className = i === 1 ? "card active" : "card"; // 진행 점 업데이트 var dots = document.getElementById("dots").children; dots[0].classList.toggle("active", i === 0); dots[1].classList.toggle("active", i === 1);}
이 함수는:
모든 카드에서 active를 제거합니다
대상 카드에 active를 추가합니다
진행 표시 점을 업데이트합니다
4
버튼 이벤트 리스너
버튼이 내비게이션 또는 닫기를 트리거합니다:
복사
AI에게 묻기
// 다음 단계로 진행document.getElementById("next-0").addEventListener("click", function () { setActive(1);});// 인앱 메시지 닫기document.getElementById("done").addEventListener("click", function (e) { if (window.OneSignalIamApi && OneSignalIamApi.close) { OneSignalIamApi.close(e); }});
중요:OneSignalIamApi.close(e)는 HTML 내에서 인앱 메시지를 닫는 OneSignal SDK 메서드입니다.
핵심 포인트: 이것은 인앱 메시지 내의 단일 페이지 애플리케이션(SPA) 패턴입니다. 모든 콘텐츠는 한 번 로드되고, JavaScript가 리로드 없이 상태 변경을 관리합니다.
<div class="dots" id="dots"> <div class="dot active"></div> <div class="dot"></div> <div class="dot"></div> <!-- 새 점 --></div>
setActive() 함수 업데이트:
복사
AI에게 묻기
function setActive(i) { document.getElementById("card-0").className = i === 0 ? "card active" : "card"; document.getElementById("card-1").className = i === 1 ? "card active" : "card"; document.getElementById("card-2").className = i === 2 ? "card active" : "card"; // 새 카드 var dots = document.getElementById("dots").children; dots[0].classList.toggle("active", i === 0); dots[1].classList.toggle("active", i === 1); dots[2].classList.toggle("active", i === 2); // 새 점}
이전 단계의 버튼 ID 업데이트:
카드 1의 버튼에서 id="done"을 id="next-1"로 변경하고 클릭 리스너를 추가:
복사
AI에게 묻기
document.getElementById("next-1").addEventListener("click", function () { setActive(2);});
새 마지막 카드(card-2)에 닫기 버튼 추가:
복사
AI에게 묻기
document.getElementById("done").addEventListener("click", function (e) { if (window.OneSignalIamApi && OneSignalIamApi.close) { OneSignalIamApi.close(e); }});
온보딩 플로우는 짧게 유지하세요 (최대 2-4단계). 사용자는 긴 플로우에서 빠르게 이탈합니다. 클릭 추적으로 완료율을 테스트하세요.