• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 캐러셀 스와이프 애니메이션 관련 질문

캐러셀 스와이프 애니메이션 관련 질문

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #111567

    이정훈
    참가자
            <div class="wrapper" style="overflow: hidden;">
                <div class="slide-container transition-all">
                    <div class="slide-box">
                        < img src="https://codingapple.com/wp-content/uploads/2022/02/car1.png" alt="" draggable="false">
                    </div>
                    <div class="slide-box">
                        < img src="https://codingapple.com/wp-content/uploads/2022/02/car2.png" alt="" draggable="false">
                    </div>
                    <div class="slide-box">
                        < img src="https://codingapple.com/wp-content/uploads/2022/02/car3.png" alt="" draggable="false">
                    </div>
                </div>
                <button class="slide-btn">1</button>
                <button class="slide-btn">2</button>
                <button class="slide-btn">3</button>
                <button id="prev-btn">prev</button>
                <button id="next-btn">next</button>
            </div>
     
    let cnt = 0;
    let width = 33.333333;
    let slideContainer = $(".slide-container"), slideBtns = $(".slide-btn");
    let positions = [];
    for (let i = 0; i < slideBtns.length; i++) {
        positions[i] = i * -width;
        slideBtns.eq(i).click(() => {
            slideContainer.css("transform", `translateX(${positions[i]}%)`);
            cnt = i;
        });
    }
    $("#prev-btn").on("click", () => {
        cnt = (cnt + positions.length - 1) % positions.length;
        slideContainer.css("transform", `translateX(${positions[cnt]}%)`);
    });
    $("#next-btn").on("click", () => {
        cnt = (cnt + 1) % positions.length;
        slideContainer.css("transform", `translateX(${positions[cnt]}%)`);
    });
    // mouse event
    let mouseDown = false;
    let mouseDownPoint = 0;
    slideContainer.on("mousedown", (e) => {
        mouseDownPoint = e.clientX;
        mouseDown = true;
        slideContainer.removeClass("transition-all");
    });
    slideContainer.on("mousemove", (e) => {
        if (mouseDown) {
            let mouseMoveDist = mouseDownPoint - e.clientX;
            if (mouseMoveDist >= 300) {
                cnt += (cnt + 1 > positions.length - 1 ? 0 : 1);
                slideContainer.css("transform", `translateX(${positions[cnt]}%)`);
                slideContainer.addClass("transition-all");
            }
            
            else if (mouseMoveDist <= -300) {
                cnt += (cnt - 1 < 0 ? 0 : -1);
                slideContainer.css("transform", `translateX(${positions[cnt]}%)`);
                slideContainer.addClass("transition-all");
            }
            else {
                slideContainer.css("transform", `translateX(calc(${-mouseMoveDist}px + ${positions[cnt]}%))`);
            }
        }
        else {
            slideContainer.addClass("transition-all");
        }
    });
    slideContainer.on("mouseup", (e) => {
        mouseDown = false;
        slideContainer.css("transform", `translateX(${positions[cnt]}%)`);
        slideContainer.addClass("transition-all");
    });
    slideContainer.on("mouseover", (e) => {
        mouseDown = false;
        slideContainer.css("transform", `translateX(${positions[cnt]}%)`);
        slideContainer.addClass("transition-all");
    });
     
    캐러셀을 스와이프 해서 넘길 때 애니메이션이 없으면 제대로 작동하는데 transition: all 1s를 주면 끝까지 넘어가버립니다.
    애니메이션이 작동하는 동안 이벤트 리스너가 작동해서 다음 칸으로 바로 넘어간다고 생각합니다.
    애니메이션이 끝나고 이벤트 리스너가 다시 작동하도록 하려면 어떻게 해야 하나요?
    #111578

    codingapple
    키 마스터
    transition 클래스 넣고나서 1초 후에 transition 클래스 제거하라고 코드짜봅시다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠