jQuery - 스마트폰 스크린 회전 감지 스크립트

스마트폰의 스크린이 가로모드와 세로모드를 감지하여 필요에 따라 스타일시트나 스크립트를 다르게 사용하는 경우가 있다.

일단 css의 미디어쿼리로 처리하는 방법을 보면 아래와 같다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#cover{
display:none;
}
@media only screen and (device-width: 768px) and (orientation: landscape) {
#cover{
display: block;
}
}
@media only screen and (min-device-width: 320px) and (orientation: landscape) {
#cover{
display: block;
}
}
#cover{ display:none; } @media only screen and (device-width: 768px) and (orientation: landscape) { #cover{ display: block; } } @media only screen and (min-device-width: 320px) and (orientation: landscape) { #cover{ display: block; } }
#cover{
   display:none;
}
@media only screen and (device-width: 768px) and (orientation: landscape) {
  #cover{
    display: block;
  }
}

@media only screen and (min-device-width: 320px) and (orientation: landscape) {
  #cover{
    display: block;
  }
}

 위 처럼 쓰면 일단 작동이 제대로 되긴 된다. #cover가 사라져있다가 landscape 되는 순간 보여지게 되는 것이다.

그러나 문제는 입력칸에 포커스가 되었을 때다.
이 때 자판이 올라오게 되는데 자판이 올라오면서 화면의 가로 세로 비율이 바뀌게 되고 css에서는 가로모드라 감지하고 #cover 요소가 보이는 코드가 실행이 된다.

즉, 위 코드는 알고보면 가로 :  세로 비율을 갖고 처리하는 것 같다.

그래서 스크립트로 처리하기로 하여 아래와 같이 js 코드를 작성하였다. 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$(window).on("orientationchange",function(){
if(window.orientation == 0) // Portrait
{
$('#cover').removeClass('show');
}
else // Landscape
{
$('#cover').addClass('show');
}
});
$(window).on("orientationchange",function(){ if(window.orientation == 0) // Portrait { $('#cover').removeClass('show'); } else // Landscape { $('#cover').addClass('show'); } });
$(window).on("orientationchange",function(){
   if(window.orientation == 0) // Portrait
      {
         $('#cover').removeClass('show');
      }
   else // Landscape
      {
         $('#cover').addClass('show');
      }
});

 이렇게 하면 화면이 회전하지 않으면 #cover 요소에 show라는 클래스를 지우고, 회전하게 되면 show라는 클래스를 추가하는 스크립트이다.

스타일 시트는 #cover.show 라고 클래스를 가진 경우를 display:block 처리하면 된다.

작동 테스트 결과 아주 잘 작동되고 있다.

입력칸에 포커스가 가도 이상이 없다. 

Subscribe
Notify of
guest


이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

1 댓글
Oldest
Newest
Inline Feedbacks
View all comments
trackback

[…] $(‘#cover’).addClass(‘show’);       } }); 원문주소 : http://bongsunga.com/blog/2976 ** 원문에는 미디어쿼리로 처리하는 내용도 있는데 이 것을 미디어쿼리로 […]

TOP