개요
사이트 처음 접속시 레이어 팝업을 4개 open 합니다.
그런데 무작정 띄우는게 아니라 첫번째 레이터 팝업 닫으면 그다음 레이어 팝업 뜨고 또 닫으면 그다음 팝업이 떠야 합니다.
알고리즘을 어떻게 구현할까 생각하다 generator 를 사용하여 팝업 닫으면 그 다음 레이어 팝업을 뜨게 구현합니다.
실제 코드는 아래코드보다는 많이 복잡하지만 제네레이터 사용 방법을 알고자 간단한 코드로 처리했습니다.
html
<div id="pop1">
~~~ 팝업 1 내용
<button @click="closePopup()">닫기</button>
</div>
<div id="pop2">
~~~ 팝업 2 내용
<button @click="closePopup()">닫기</button>
</div>
<div id="pop3">
~~~ 팝업 3 내용
<button @click="closePopup()">닫기</button>
</div>
<div id="pop4">
~~~ 팝업 4 내용
<button @click="closePopup()">닫기</button>
</div>
<script setup>
import { ref, onMounted } from 'vue';
const popupIds = ['pop1', 'pop2', 'pop3', 'pop4'];
const currentPopup = ref(null);
let popupGenerator;
function* popupSequence() {
for (const id of popupIds) {
yield id;
}
}
function openNextPopup() {
const next = popupGenerator.next();
if (!next.done) {
currentPopup.value = next.value;
} else {
currentPopup.value = null; // 모든 팝업이 닫힘
}
}
function closePopup() {
openNextPopup();
}
function startPopupSequence() {
popupGenerator = popupSequence();
openNextPopup();
}
onMounted(() => {
startPopupSequence();
});
</script>
위 코드는 다음과 같이 작동합니다:
- popupIds 배열에 모든 팝업의 ID를 저장합니다.
- currentPopup은 현재 열려있는 팝업의 ID를 저장하는 반응형 참조(ref)입니다.
- popupSequence 제네레이터 함수는 popupIds 배열의 각 ID를 순차적으로 yield합니다.
- openNextPopup 함수는 제네레이터에서 다음 팝업 ID를 가져와 currentPopup에 설정합니다.
- closePopup 함수는 현재 팝업을 닫고 다음 팝업을 엽니다.
- startPopupSequence 함수는 제네레이터를 초기화하고 첫 번째 팝업을 엽니다.
- onMounted 훅에서 startPopupSequence를 호출하여 컴포넌트가 마운트될 때 팝업 시퀀스를 시작합니다.
- 템플릿에서는 v-for로 모든 팝업을 렌더링하지만, v-show를 사용하여 현재 팝업만 표시합니다.
이 방식을 사용하면 팝업의 순서를 쉽게 관리할 수 있으며, 새로운 팝업을 추가하거나 순서를 변경하는 것도 간단합니다.
또한, 제네레이터를 사용함으로써 팝업 시퀀스의 상태를 효과적으로 관리할 수 있습니다.
'프로그래밍 > Js' 카테고리의 다른 글
Array.reduce 여러가지 사용 사례 (0) | 2024.08.27 |
---|---|
[es6] 단축평가 예제 (short-circuit evaluation) (0) | 2024.08.26 |
이기종간 데이터 변환(한글) 전문에 한글 전송 방법 (0) | 2024.08.22 |
vue3 부모->자식 자식->부모 데이터 전달방법 (0) | 2024.08.12 |
vue3 pinia 메모리 누수 증가 개선코드 (0) | 2024.08.02 |