상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
신용불량 극복을 위한 실질적인 가이드
주식 투자 리스트와 목표 설정
이혼 소송 준비의 기본: 필요한 서류는 무엇일까?
코인투자, 기술적 분석 심화
재산 분할 소송: 이혼 후 자산 보호를 위한 전략
재산 분할 소송: 이혼 후의 재정 관리
"위자료 변호사: 가정법 전문의 필요성"
"위자료 변호사와 함께 치유의 과정을 시작하자"
"위자료 변호사와 어렵지 않게 소통하는 법"
이혼 소송 전문 변호사가 정리한 재산 분할 유형
이혼 소송 비용, 예상보다 더 소요되는 이유
이혼 소송 비용과 시간적 비용 비교하기
Previous
Next
수정하기 - switchMap을 사용하여 CSS 애니메이션을 처리하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
switchMap 연산자는 RxJS에서 주로 사용되는 연산자로, 이전에 발생한 Observable의 구독을 취소하고 새로운 Observable로 전환하는 역할을 합니다. 이를 이용해 CSS 애니메이션을 처리할 때, 예를 들어 특정 이벤트가 발생할 때마다 애니메이션을 재시작하거나 새로운 애니메이션 시퀀스를 실행해야 할 때 효과적으로 사용할 수 있습니다. switchMap으로 CSS 애니메이션 처리 기본 원리 1. 이벤트 스트림 관찰 예를 들어, 버튼 클릭, 마우스 이동, 입력값 변경 등의 DOM 이벤트를 RxJS의 Observable로 감쌉니다. 이 이벤트 스트림을 기반으로 애니메이션을 시작하거나 재시작할 예정입니다. 2. 애니메이션 Observable 생성 CSS 애니메이션은 보통 CSS 클래스 토글을 통해 트리거하거나, `<a href='https://sangseek.com/sangseeks/requestAnimationFrame/ko'>requestAnimationFrame</a>` 기반의 애니메이션, 또는 `setTimeout`/`setInterval`을 통해 제어합니다. 이를 RxJS Observable로 래핑하면 애니메이션 완료 시점이나 반복 시점을 이벤트로 만들 수 있습니다. 예를 들면: ```typescript function animationObservable(element: HTMLElement, animationClass: string): Observable<void> { return new Observable(observer => { element.classList.add(animationClass); function onAnimationEnd() { element.classList.remove(animationClass); element.removeEventListener('animationend', onAnimationEnd); observer.next(); observer.complete(); } element.addEventListener('animationend', onAnimationEnd); // 구독 취소 시 애니메이션 중지 처리 return () => { element.classList.remove(animationClass); element.removeEventListener('animationend', onAnimationEnd); }; }); } ``` 3. switchMap 적용 이벤트 Observable에 `switchMap` 연산자를 연결해, 이벤트가 발생할 때마다 이전 애니메이션을 취소하고 새로운 애니메이션 Observable로 전환하도록 합니다. 이렇게 하면 애니메이션을 중첩시키지 않고, 항상 최신 이벤트에 대한 애니메이션만 실행됩니다. 예시: ```typescript const clicks$ = fromEvent(button, 'click'); const animation$ = clicks$.pipe( switchMap(() => animationObservable(box, 'animate')) ); animation$.subscribe(); ``` 위 코드의 의미: - 버튼 클릭 스트림에서 클릭 이벤트가 들어오면 `switchMap`이 발동 - `animationObservable`을 실행해 CSS 클래스가 추가되어 애니메이션 시작 - 이전에 진행 중이던 애니메이션이 있으면 바로 종료되고 새로운 애니메이션으로 교체된다 - 애니메이션 종료 시점에 Observable이 완료되며, 다음 클릭에 대비 switchMap 사용시 고려사항 - 애니메이션 재시작 `switchMap`을 사용하면 여러 이벤트가 빠르게 들어올 때 이전 애니메이션가 취소되므로, 애니메이션이 중첩되지 않고 재시작되는 효과가 생깁니다. - 애니메이션 종료 이벤트 활용 CSS 애니메이션의 종료 시점을 파악하기 위해 `animationend` 이벤트를 구독하는 것이 일반적입니다. 이 시점에 Observable을 완료해야 `switchMap`이 다음 이벤트로 자연스럽게 넘어갑니다. - 컨트롤 플로우 단순화 RxJS 관점에서 이벤트-애니메이션-완료의 흐름을 사슬처럼 연결하므로, 복잡한 콜백 <a href='https://sangseek.com/sangseeks/지옥/ko'>지옥</a> 대신 선언적으로 애니메이션 관리를 할 수 있습니다. - 메모리 누수 방지 `switchMap`은 내부적으로 이전 구독을 자동으로 해제하므로 리스너를 중복으로 추가하지 않게 돼 메모리 누수 위험을 줄입니다. 요약 switchMap을 사용해 CSS 애니메이션을 처리하려면 다음 절차를 따릅니다. 1. 이벤트 Observable 생성 (예: 클릭 이벤트) 2. CSS 애니메이션을 Observable로 래핑 (애니메이션 시작과 종료 이벤트를 캡처하는 Observable 생성) 3. 이벤트 스트림에 switchMap을 적용하여 이벤트가 발생할 때마다 기존 애니메이션을 취소하고 새 애니메이션 시작 4. 결과 Observable을 구독하여 애니메이션 흐름 제어 이 방법은 빠르게 연속된 이벤트 발생 시 매끄럽게 애니메이션을 갱신하고, 관리하기 힘든 콜백 대신 선언형 코드로 애니메이션 로직을 작성할 수 있어서 유지보수성이 뛰어나고, RxJS의 장점을 최대한 살릴 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기