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

home2 게시판 JavaScript, TS 게시판 캐러셀에 스와이프 기능 만들기 응용

캐러셀에 스와이프 기능 만들기 응용

  • 이 주제에는 4개 답변, 2명 참여가 있으며 Ted2 년, 2 월 전에 전에 마지막으로 업데이트했습니다.
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 글쓴이
  • #74776

    Ted
    참가자
    응용문제에서
    캐러셀이 갯수가 많아질 때 코드를 생각하다가
    for문으로 만들어봤는데요, 마지막 박스로 이동만 되면 모든게 정지가 됩니다.
    박스추가해서 많이 만들어도 다행히 잘 작동하는데 마지막 박스만 가면 그냥 정지,,,가 되는데요.
    
    진짜 생각 많이 해봤는데요,
    혹시 마지막박스가면 반복문이 종료가 되면서 모든 이벤트가 종료가 되는건가요..?
    근데, 마지막 간다해도, 다시 번호판 1 2 3 누른뒤 다시 드래그하면 또 잘 되거든요.. 
    어떻게 코딩을 해야 마지막박스로 드래그하고 나서도 잘 작동하게 만들 수 있을까요...
    
    고심끝에 질문 드립니다 ㅠㅠ.
    
    
    <script>
          let 시작좌표 = 0;
          let 눌렀냐 = false;
          // for문으로 작성해봄
          for (let i = 0; i < $('.slide-box').length - 1; i++) {
            $('.slide-box')
              .eq(i)
              .on('mousedown', function (e) {
                시작좌표 = e.clientX;
                눌렀냐 = true;
              });
            $('.slide-box')
              .eq(i)
              .on('mousemove', function (e) {
                console.log(e.clientX - 시작좌표);
                if (눌렀냐) {
                  switch (i) {
                    case 0:
                      console.log(`현재 i의 값은 = ${i}`);
                      console.log(
                        "$('.slide-box').length - 1의 값은 = " +
                          ($('.slide-box').length - 1)
                      );
                      if (e.clientX - 시작좌표 < 0) {
                        $('.slide-container').css(
                          'transform',
                          `translateX(${e.clientX - 시작좌표}px)`
                        );
                      }
                      break;
                    case $('.slide-box').length - 1:
                      console.log(`현재 i의 값은 = ${i}`);
                      console.log(
                        "$('.slide-box').length - 1의 값은 = " +
                          ($('.slide-box').length - 1)
                      );
                      if (e.clientX - 시작좌표 > 0) {
                        $('.slide-container').css(
                          'transform',
                          `translateX(calc(${e.clientX - 시작좌표}px - ${i}00vw))`
                        );
                      }
                      break;
                    default:
                      console.log(`현재 i의 값은 = ${i}`);
                      console.log(
                        "$('.slide-box').length - 1의 값은 = " +
                          ($('.slide-box').length - 1)
                      );
                      $('.slide-container').css(
                        'transform',
                        `translateX(calc(${e.clientX - 시작좌표}px - ${i}00vw))`
                      );
                  }
                }
              });
            $('.slide-box')
              .eq(i)
              .on('mouseup', function (e) {
                눌렀냐 = false;
                switch (i) {
                  case 0:
                    if (`${e.clientX - 시작좌표}` <= -200) {
                      $('.slide-container')
                        .css('transform', `translateX(-100vw)`)
                        .css('transition', 'all 0.5s');
                      current++;
                    } else {
                      $('.slide-container')
                        .css('transform', 'translateX(0vw)')
                        .css('transition', 'all 0.5s');
                    }
                    break;
                  case $('.slide-box').length - 1:
                    if (`${e.clientX - 시작좌표}` > 200) {
                      $('.slide-container')
                        .css('transition', 'all 0.5s')
                        .css('transform', `translateX(-${i - 1}00vw)`);
                      current--;
                    }
                    break;
                  default:
                    if (`${e.clientX - 시작좌표}` <= -200) {
                      $('.slide-container')
                        .css('transition', 'all 0.5s')
                        .css('transform', `translateX(-${i + 1}00vw)`);
                      current++;
                    } else if (`${e.clientX - 시작좌표}` > 200) {
                      console.log(`-${i - 1}00vw 만큼 이동합니다`);
                      $('.slide-container')
                        .css('transition', 'all 0.5s')
                        .css('transform', `translateX(-${i - 1}00vw)`);
                      current--;
                    } else {
                      $('.slide-container')
                        .css('transition', 'all 0.5s')
                        .css('transform', `translateX(-${i}00vw)`);
                    }
                }
                setTimeout(() => {
                  $('.slide-container').css('transition', 'none');
                }, 500);
              });
          }
        </script>
    #74786

    codingapple
    키 마스터
    current 변수가없다는 에러가 뜨는데 current변수정의가 없는듯요
    #74829

    Ted
    참가자
    아 그거는, 1 2 3 버튼과 이전 다음 버튼에도 같이 하려고 했던건데
    current 없이 코드만 봐주세요
    current 삭제한 코드입니다.
    let 시작좌표 = 0;
    let 눌렀냐 = false;
    // for문으로 작성해봄
    for (let i = 0; i < $('.slide-box').length - 1; i++) {
      $('.slide-box')
        .eq(i)
        .on('mousedown', function (e) {
          시작좌표 = e.clientX;
          눌렀냐 = true;
        });
      $('.slide-box')
        .eq(i)
        .on('mousemove', function (e) {
          console.log(e.clientX - 시작좌표);
          if (눌렀냐) {
            switch (i) {
              case 0:
                console.log(`현재 i의 값은 = ${i}`);
                console.log(
                  "$('.slide-box').length - 1의 값은 = " +
                    ($('.slide-box').length - 1)
                );
                if (e.clientX - 시작좌표 < 0) {
                  $('.slide-container').css(
                    'transform',
                    `translateX(${e.clientX - 시작좌표}px)`
                  );
                }
                break;
              case $('.slide-box').length - 1:
                console.log(`현재 i의 값은 = ${i}`);
                console.log(
                  "$('.slide-box').length - 1의 값은 = " +
                    ($('.slide-box').length - 1)
                );
                if (e.clientX - 시작좌표 > 0) {
                  $('.slide-container').css(
                    'transform',
                    `translateX(calc(${e.clientX - 시작좌표}px - ${i}00vw))`
                  );
                }
                break;
              default:
                console.log(`현재 i의 값은 = ${i}`);
                console.log(
                  "$('.slide-box').length - 1의 값은 = " +
                    ($('.slide-box').length - 1)
                );
                $('.slide-container').css(
                  'transform',
                  `translateX(calc(${e.clientX - 시작좌표}px - ${i}00vw))`
                );
            }
          }
        });
      $('.slide-box')
        .eq(i)
        .on('mouseup', function (e) {
          눌렀냐 = false;
          switch (i) {
            case 0:
              if (`${e.clientX - 시작좌표}` <= -200) {
                $('.slide-container')
                  .css('transform', `translateX(-100vw)`)
                  .css('transition', 'all 0.5s');
              } else {
                $('.slide-container')
                  .css('transform', 'translateX(0vw)')
                  .css('transition', 'all 0.5s');
              }
              break;
            case $('.slide-box').length - 1:
              if (`${e.clientX - 시작좌표}` > 200) {
                $('.slide-container')
                  .css('transition', 'all 0.5s')
                  .css('transform', `translateX(-${i - 1}00vw)`);
              }
              break;
            default:
              if (`${e.clientX - 시작좌표}` <= -200) {
                $('.slide-container')
                  .css('transition', 'all 0.5s')
                  .css('transform', `translateX(-${i + 1}00vw)`);
              } else if (`${e.clientX - 시작좌표}` > 200) {
                console.log(`-${i - 1}00vw 만큼 이동합니다`);
                $('.slide-container')
                  .css('transition', 'all 0.5s')
                  .css('transform', `translateX(-${i - 1}00vw)`);
              } else {
                $('.slide-container')
                  .css('transition', 'all 0.5s')
                  .css('transform', `translateX(-${i}00vw)`);
              }
          }
          setTimeout(() => {
            $('.slide-container').css('transition', 'none');
          }, 500);
        });
    }
     
    #74841

    codingapple
    키 마스터
    반복문에  i < $('.slide-box').length 라고 해야 3번 실행될듯요
    #75110

    Ted
    참가자
    !!! 감사합니다
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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