본문 바로가기
JavaScript

[JavaScript]화면 스크롤시 이미지 회전시키기

by teamnova 2022. 1. 3.
728x90

스크롤시 화면중앙에 고정된 이미지가 회전되도록 해보겠습니다.

스틱코드에서 즐겨찾기해 사용해보세요.

https://stickode.com/detail.html?no=2705 

 

스틱코드

 

stickode.com

스크롤시 회전하는 고양이 복순이

 

단계별로 진행해 보겠습니다. html -> css-> script 작성 순으로 진행


< html > 로 화면구조를 만듭니다.

<section>을 사용해 배경이미지 노랑색배경 , 흰색배경을 만들고 

div classs wrapper 안에 담긴 고양이 이미지를 만든다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>스크롤시 회전하는 이미지 만들기</title>
</head>
<body>
<!-- 첫번째화면(노랑배경) -->
<section class ="scene one">
// 화면전체를 감싸는 div입니다.
<div class="wrapper">
	// 고양이미지 id를 reload라고 설정합니다.
	 <img id="reload" src="./upload/IMG_8497.jpg" alt="scroll"> </div>
</div>
</section>

<!-- 스크롤후 두번째화면(흰배경) -->
<section class ="scene two">
</section>


</body>
</html>

 

< css > 로 스타일을 입힙니다.

배경은 두개로 구성되어있고, 첫번째 화면은 노랑색  /두번째화면은 흰색입니다.

다음으로 가운데 넣을 고양이 이미지의 가로세로사이즈를 설정해줍니다.

 <style>
        * {
            margin: 0; // 모든,기본값들을 margin 0으로 설정
        }
        // 전체화면 영역
        .wrapper {
            top: 50%; 
            left: 50%; 
            transform: translate(-50%, -50%); 
            position: fixed; // 위치는 고정 
        }
        #reload {
            width: 500px; // 고양이 이미지 가로 사이즈
            height: 400px; // 높이
        }
             /* 메인화면 CSS*/
             .scene{
                top:0;
                left:0;
                height:100vh;
                overflow:hidden;
                background-attachment:fixed;
                background-size: cover;
                }
                /* 첫번째 배경 */
                .scene.one{  
                background:yellow;
                }
                 /* 두번째배경 */
                .scene.two{
                background:white;
                }
                header{
                    margin:0;
                    padding:0;
                }
    </style>

 

< Script > 로 움직임을 넣어줍니다.

스크롤했을때 이미지가 회전하도록 이벤트를 걸어주었습니다.

<script> // 스크롤 이벤트 script
  window.onscroll = function () {
  scrollRotate(); // DOM에서 함수 onscroll(),를 호출할 함수 를 만듭니다 scrollRotate()
  };

  function scrollRotate() { 
  // id를 통해 reload 요소를 찾으면 스크롤하여 회전하고 image변수에 저장합니다 .
  let image = document.getElementById("reload");
  // 문서가 현재 세로축을 따라 스크롤되는 픽셀수를 반환하는 Window.pageYOffset 속성을 적용 합니다.
  image.style.transform = "rotate(" + window.pageYOffset/2 + "deg)";
  }

</script>
  1. DOM에서 함수 onscroll(),를 호출할 함수  만듭니다 scrollRotate().
  2. id를 통해 reload 요소를 찾으면 스크롤하여 회전하고 image변수에 저장합니다 .
  3. transformCSS 속성을 사용 하여 회전하여 reload요소를 조작합니다.
  4. 문서가 현재 세로축을 따라 스크롤되는 픽셀수를 반환하는 Window.pageYOffset 속성을 적용 합니다.
  5. Window.pageYOffset/2 숫자가 낮을 수록 회전이 빠르고, 숫자가 높을수록 회전이 느려집니다.

참고 / Window.pageYOffset 속성

https://developer.mozilla.org/en-US/docs/Web/API/Window/pageYOffset

 

< 전체코드 > html + css + javascript 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>스크롤시 회전하는 이미지 만들기</title>
    <style>
        * {
            margin: 0; // 모든,기본값들을 margin 0으로 설정
        }
        // 전체화면 영역
        .wrapper {
            top: 50%; 
            left: 50%; 
            transform: translate(-50%, -50%); 
            position: fixed; // 위치는 고정 
        }
        #reload {
            width: 500px; // 고양이 이미지 가로 사이즈
            height: 400px; // 높이
        }
             /* 메인화면 CSS*/
             .scene{
                top:0;
                left:0;
                height:100vh;
                overflow:hidden;
                background-attachment:fixed;
                background-size: cover;
                }
                /* 첫번째 배경 */
                .scene.one{  
                background:yellow;
                }
                 /* 두번째배경 */
                .scene.two{
                background:white;
                }
                header{
                    margin:0;
                    padding:0;
                }
    </style>
</head>
<body>
<!-- 첫번째화면(노랑배경) -->
<section class ="scene one">
// 화면전체를 감싸는 div입니다.
<div class="wrapper">
	// 고양이미지 id를 reload라고 설정합니다.
	 <img id="reload" src="./upload/IMG_8497.jpg" alt="scroll"> </div>
</div>
</section>

<!-- 스크롤후 두번째화면(흰배경) -->
<section class ="scene two">
</section>
<script> // 스크롤 이벤트 script
  window.onscroll = function () {
  scrollRotate(); 
  };

  function scrollRotate() { // 스크롤할때 이미지를 회전 시킨다.
  let image = document.getElementById("reload");
  image.style.transform = "rotate(" + window.pageYOffset/2 + "deg)";
  }

</script>
</body>
</html>

완성!

웹 사이트를 만들때 활용해보면 좋겠죠?

스틱코드를 잘활용해 보시기 바랍니다

 

https://stickode.com/detail.html?no=2705 

 

스틱코드

 

stickode.com