[jQuery - 실습] Changing element position with Scroll

테크야끼·2021년 5월 21일
1

jQuery

목록 보기
10/11

💡 학습목표

스크롤을 트리거로 요소의 좌표를 특정 구간동안 제어하는 로직을 통해 window.scrollY, .offset() 등 요소의 좌표를 반환하거나 제어하는 메서드를 심화학습한다.

HTML

  <body>
    <div class="container">
      <div class="bg"></div>
      <i class="far fa-angry smile"></i>
    </div>
  </body>

CSS

      body {
        height: 1200px;
        display: flex;
        align-items: center;
        justify-content: center;
      }
      .container {
        width: 500px;
        height: 500px;
        display: flex;
        align-items: center;
      }

      div {
        width: 300px;
        height: 300px;
        position: absolute;
      }

      i {
        font-size: 200px;
        line-height: 300px;
        position: relative;
      }

      .bg {
        width: 193px;
        height: 200px;
        background: yellow;
        border-radius: 50%;
        position: absolute;
        left: 200px;
      }

JavaScript

$(function () {
  //changing charactors position

  //1. 스크롤 트리거
  $(window).scroll(function () {
    //2. 요소의 offset().top 값 받아서 변수 설정
    let ElemTop = $('.smile ').offset().top;

    //3. scroll값 / 요소의 top값
    // 요소까지 도달하기 까지의 scroll 값의 비율을 0 ~ 1 까지 받아옴 ( 100분율 )
    console.log('scroll 값 : ' + window.scrollY);
    console.log('요소의 top 값: ' + ElemTop);

    let moveTrue = window.scrollY / ElemTop;
    console.log(moveTrue);

    //4. 받아온 값으로 조건을 걸어 이동시킬 거리에 곱하여 css를 제어한다.
    if (moveTrue < 1) {
      $('.smile').css({ left: moveTrue * 400 });
    }
  });
});
  1. scroll() 메서드를 이용해 스크롤을 했을 때 작동시킬 코드를 작성한다.

  2. 페이지 가장 위부터 요소까지의 거리를 (top값)을 받아 변수에 넣는다.

  3. (scroll값 / 요소의 top값) 을 통해 요소까지 도달하기 까지의 scroll 값의 비율을 0 ~ 1 까지 받아온다. ( 100분율 )

    이 값을 콘솔에 찍어보면 아래와같다.

  • 스크롤의 위치가 0일 때

    (0 / 508 == 0 )

  • 스크롤의 위치가 증가하여 요소의 위치까지 도달했을 때

    ( 508 / 508 == 1 )

이 코드가 이 로직의 핵심적인 부분이다. 스크롤위치를 요소의 위치로 나누어 요소가 도달하기 까지 사이를 백분율로 만든다.

이 것을 통해 요소를 일정 구간을 일정한 값으로 제어할 수 있게 된다.

  1. 받아온 값으로 조건을 걸어 이동시킬 거리에 곱하여 css를 제어한다.

moveTrue는 0 ~ 1 까지의 수가 되는데 만약 정해둔 구간을 지나 1이 넘어가게 되었을 때 이동을 멈추게 하기위해 if (moveTrue < 1)을 걸어 준다.

그리고 css에서 요소를 이동시킬 거리에 moveTrue를 곱하여 실제로 이동시킨다.

이동거리는 left : 0에서 시작해 left : 400까지 설정되어 정해둔 구간에만 움직일 수 있게된다!

0개의 댓글