pixel density라고 불리는 ppi(pixel per inch) 를 통해서 device의 픽셀 밀도
를 알 수 있다. (높을수록 선명)
디바이스(모바일 기기)마다 픽셀 밀도가 다르다.
1배율의 픽셀 갯수가 가로,세로 각각 2배로 커졌음을 의미한다. 여기서 말하는 2배는 사실 픽셀의 개수가 1개에서 4개로 바뀌었다는 점이다.
픽셀의 총 갯수는 4배 증가(가로2, 세로2) 한 것이지만 물리적이 공간 크기는 그대로인 상태에서 픽셀의 갯수는 4분할 되었기 때문에 배수로 얘기하면 2배라고 말한다.
(참고 : https://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions)
이 단위는 logical width라고도 함. 단위도 pixel이라고 하지 않고 point(pt)라고 함.
CSS 개발에서는 이 크기를 css pixel 또는 device independent pixel 이라고 부른다.
기본 해상도를 physical pixel 또는 device pixel 이라고 한다.
device pixel = CSS pixel * pixel ratio
<meta name="viewport" content="width=device-width, initial-scale=1.0">
아래 링크에 가면 자세한 내용을 알 수 있다.
https://webclub.tistory.com/629
ratio = window.devicePixelRatio;
if(ratio >= 2) { // ratio > 1 로하면 브라우저 조금만 확대해도 모바일로 인식함
//이러한 위험성 때문에 아래 방법이 더 좋다.
document.querySelector('.pc').style.display = 'none';
}else{
document.querySelector('.mobile').style.display = 'none';
}
Modernizr는 cross browsing을 위해 필요하다.
touch event가 적용되면 모바일에서 이용하는 것으로 본다.
다운로드 -> 찾아볼 기능 검색 -> +를 누르면 우측에 view examples이 나온다
하지만 모든 기능을 찾아서 +해서 사용할 수 없으니 Modernizr cdn을 사용해서 script src를 넣어준다음 아래 코드 넣어준다.
if(Modernizr.touchevents) {
document.querySelector('.pc').style.display = 'none';
}else{
document.querySelector('.mobile').style.display = 'none';
}
아래 동영상을 보고 모바일 감지하기 공부하자
https://www.youtube.com/watch?v=1O13X68nrSs
touchstart -> touchmove -> touchend
document.querySelector("p").addEventListener('touchmove', (evt) => {
console.log(evt.changedTouches);
});
touch이벤트리스너에 전달되는 event객체에는 target 속성이 있으며 touches와 changedTouches라는 하위 속성이 있다.
이 두 개의 값은 배열타입이다. 그 이유는 하나뿐인 마우스 포인터만 있는 PC와 다르게, 모바일 기기에서는 1개 이상의 터치영역이 생기기 때문이다. (손가락이 여러개라서)
때문에 어떤 손가락은 touchstart이고 어떤 손가락은 touchmove중인 상태가 발생 된다.
touches
: 모든 touch 이벤트
changedTouches
: 이전대비 현재 변화가 일어난 모든 이벤트
touchstart 와 touchend 에서 changedTouches 는 언제나 1개만 들어온다다.
changedTouches 가 여러 개 들어오는 상황은 touchmove 에서 2개 이상의 손가락을 동시에 움직일 때 이다.
인덱스는 그냥 인덱스일 뿐 처음 터치한 손가락이 뭔지, 두 번째 터치한 손가락이 뭔지를 알려주지는 않는다.
touchmove 는 touchstart 나 touchend 와 달리 일반적으로 브라우저가 처음부터 소유해 버린다.
따라서 최초 한 번은 발생하지만 그 이후는 브라우저의 스크롤이 가져가 버린다.
만약 어떤 dom 에서 touchmove 이벤트를 사용하겠다는 뜻은 바꿔 말하면 그 영역에서는 스크롤이 안일어나게 하겠다
는 뜻이다.
따라서 touchmove 의 경우는 반드시 e.preventDefault()
를 호출하여 막아주지 않으면 제대로 작동하지 않는다.
자세한 Touch Event는 아래 링크를 참조하자
touch event
모바일웹은 제한된 크기로 화면을 숨겨두고 보여주기를 잘 해야함. 특히 화면 전환 시에 애니메이션이 효과적이다.
모바일웹의 애니메이션 역시, CSS3의 transform속성을 잘 사용하면 된다.
css
transition: transform .5s ease-in-out;
transform: translate3d(100px, 0px, 0px);
javascript에서 css속성 설정
elTarget.style[sTS] = sValue + " " + nDuration + "s";
elTarget.style[sTF] = 'translate3d(' + (nPreviousTranslateX + nDistance) + 'px, 0, 0)';
다음 모바일 환경 확인
http://troy.labs.daum.net/
참고