본문 바로가기
Programming_Language/JavaScript

[Event] 반응형 - 페이지 이동 및 화면 크기 변경으로 load, resize 이벤트 화면 크기 변경해보자!!

by Cocopop 2024. 1. 17.
반응형




오늘은 브라우저 페이지 이동으로 onload 진행과 화면 크기가 갑자기 변경 되었을 때 발생하는 이벤트를 알아보려고 합니다.


이걸 사용하는 이유는 반응형을 사용할 때
좋은 이벤트로 예를 들어 핸드폰 화면과 태블릿 화면 크기가 다르잖아여 이벤트 발생으로 인해 그 화면의 맞게 크기 조정을 해주는 겁니다.



제일 먼저 함수를 사용하려면 load 할때와 화면 크기가 변경 될 때 발생하는 이벤트를 1 순위로 작성해야겠죠??



<html>
<head>
</head>
<body>

 
<script>

// 새로고침 및 페이지 이동 시 이벤트 발생.
 $(window).on('load',function(){
   // 로드시 이 함수로 들어간다.
 });

// 화면 크기가 변경 되면 밑에 이벤트 발생.
$(window).on('resize',function(){
 // 기존 화면 크기가 변경이 될 경우 이 함수로 들어간다.
});


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


위에 코드를 보시면 로드시와 화면크기 변경 시 해당 이벤트가 발생해요. 그 안에 원하는 로직을 작성하면 되는데요.



console.log(); 찍어서 확인을 하시면, 새로고침과 페이지 이동시에는 load 이벤트가 발생하고, F12 눌러서 모바일 디바이스로 바꾼 후 모바일 버전을 변경하면 resize 이벤트가 발생합니다.



자! 그러면 이제 화면을 어떻게 바꿀까를 생각해봐야하는데요.

1. 같은 모바일에서 페이지 이동 시 같은 화면 크기로 고정하고 싶을 때!

load, resize 이벤트 둘다 걸어주고 그 안에 resize() 함수를 호출 하면 될 것 같네요.




[resize 함수]


function pageResize(){
  // 높이 길이를 구합니다.
  let heightInt = parseInt($(this).height());
  // 너비 길이를 구합니다.
  let widthInt = parseInt($(this).width());
  
  // 화면 크기 비교
  if(widthInt <= 768){
    console.log("모바일 화면 입니다.");
  }
  else{
    console.log("테블릿 화면입니다.");
  }
}

위에 같이 코드를 작성하면 함수를 호출 할 때 현재 화면의 크기를 불러와 비교를 하고 조건에 맞게 console.log()가 찍힐 겁니다.

768 보다 작으면 모바일이고, 크면 태블릿이라고 나오겠네요. ㅎㅎ


위에 테스트가 끝나면 좀 더 디테일한 부분을 작성해볼까 해요.




1. 높이 길이가 너비보다 작을 경우 현재 div로 조절한 css 화면 높이를 비교해서 설정.



function pageResize(){
  // 높이 길이를 구합니다.
  let heightInt = parseInt($(this).height());
  // 너비 길이를 구합니다.
  let widthInt = parseInt($(this).width());
  
  // 화면 크기 비교
  
  // 높이가 너비보다 작을 경우
  if(heightInt < widthInt){
    let mainHeight = heightInt - (현재 높이에서 뺄 길이)
    if(mainHeight < (현재 페이지 높이 길이)){
      // 현재 페이지 높이 수정.
    }    
  }
  else{ // 높이가 너비보다 높을 경우
    let mainHeight = heightInt - (현재 높이에서 뺄 길이)
    if(mainHeight < (현재 페이지 높이 길이)){
      // 현재 페이지 높이 수정.
    }
  }
}


모바일이라 높이가 중요하니까 위같이 로직을 작성했습니다. 너비가 중요하면 너비 길이로 조건을 달면 되겠죠? ㅎㅎ


각 이벤트가 일어나면 해당 함수를 호출하면 반응형 화면 페이지를 기본적으로 만들 수 있을 것 같네요.

그 밖에 옵션들은 css로 추가 하면 될 것 같습니다.
















300x250