2010년 3월 30일 화요일

아이폰,안드로이드 운영체제 Touch Event

모바일 브라우저의 Touch, Gesture Event 처리 방법에 대해서 정리해봅니다.
다른 여러 사이트에서 아이폰에대해서는 정리가 많이 되었던데요...
저는 http://backtothecode.blogspot.com/2009/10/javascript-touch-and-gesture-events.html 이 블로그를 참조하여 아이폰과 안드로이드 폰에 대해서 함께 정리하여 봅니다.


Android and iPhone touch events

Android, iPhone은 공통적으로 터치와 관련해서 다음과 같은 이벤트를 제공합니다.
  • touchstart - mouseDown 이벤트와 비슷한 이벤트로 손이 화면에 닿으면 발생
  • touchmove - mouseMove 이벤트와 비슷한 이벤트로 손 터치한 상태로 이동하면 발생
  • touchend - mouseUp 이벤트와 비슷한 이벤트로 손을 화면에서 뗄때 발생. 아이폰의 경우 touchcancel 이벤트가발생
  • touchcancel - bit of a mystery 라고 표현하네요. 쬐금 이상하다는...

예제)
document.addEventListener('touchstart', function(event) {
    alert
(event.touches.length);
}, false);

Event object
위의 예제에서 보듯이 Touch Event Object는 touches array를 포함하고 있다.
안드로이드의 경우 이벤트에는 한개의 터치 오브젝트를 포함한다. 즉 touches.length는 1이다.
터치 아이폰의 경우에는 멀티터치가 가능하기 때문에 touches array를 통해서 핸들링 할 수 있다.
터치 이벤트 객체는 마우스 이벤트 객체와 같이 pageX, pageY 등의 값들을 포함하고 있다.

예제 )
document.addEventListener('touchmove', function(event) {
   
event.preventDefault();
   
var touch = event.touches[0];
    console
.log("Touch x:" + touch.pageX + ", y:" + touch.pageY);
}, false);

  • clientX: X coordinate of touch relative to the viewport (excludes scroll offset)
  • clientY: Y coordinate of touch relative to the viewport (excludes scroll offset)
  • screenX: Relative to the screen
  • screenY: Relative to the screen
  • pageX: Relative to the full page (includes scrolling)
  • pageY: Relative to the full page (includes scrolling)
  • target: Node the touch event originated from
  • identifier: An identifying number, unique to each touch event

iPhone Touch and Gesture Events

애플의 WebKit은 안드로이드와 달리 몇가지 것들을 추가적으로 지원한다. touchEnd 이벤트는 event.touches array에서 현재 touch 를 제거해준다. 대신 event.changeTouches array를 이용해서 볼 수 있다.

애플 iPhone의 터치 이벤트 객체
  • touches - touchStart, touchMove, touchEnd 의 터치 정보를 포함하고 있는 array
  • targetTouches - 같은 target Element로부터 비롯된 touches 정보를 포함
  • changedTouches - 모든 touch 정보를 가지고 있는 객체


Gesture events

애플에서는 pinching, rotating과 같은 멀티 터치 이벤트를 처리할 수 있도록 지원한다.
  • gesturestart - 멀티 터치 시작
  • gesturechange - 멀티 터치를 해서 움직일 때 발생
  • gestureend - 멀티 터치 이벤트가 끝날때 발생
멀티 터치를 위한 이벤트 객체는scale, rotation 값을 갖고 touch 객체가 없다.

예제 )
document.addEventListener('gesturechange', function(event) {
   
event.preventDefault();
    console
.log("Scale: " + event.scale + ", Rotation: " + event.rotation);
}, false);

Event table

touchstart
touchmove
touchend
gesturestart
gesturemove
gestureend
Android
y
y
y
n
n
n
iPhone
y
y
y
y
y
y
has event.touches
y
y
y
n
n
n
(iPhone) has event.scale and event.rotation
n
n
n
y
y
y
(iPhone) touch in event.touches
y
y
n
-
-
-
(iPhone) touch in event.changedTouches
y
y
y
-
-
-



원본 : http://blog.hometown.co.kr/123


※ 참고 Link :

모바일 웹 테스트

요즘 모바일 웹 쪽에 관심이 생겨 여러가지 테스트를 진행중에 있습니다.

 

아무래도 일반 웹 브라우저와 많은 부분이 다르기때문에 테스트를 감행해서 조건들을 정리 할 생각이었죠.

 

얼마전 하코사 묻고 답하기 게시판을 통해 좌표를 중심으로 회전하는 레이어를 만들었습니다.

 

http://www.superweb.kr/

 

총 12개의 레이어가 원을 그리며 회전을 합니다.

물론 웹상으로 문제 없지만 모바일에서의 구현이 궁금했습니다.

이미 국 내외로 아이폰 유저가 많기때문에 플래시를 이용한 UI구현은 지양하도록 했습니다.(지양이라기 보다는 아예배제 하구요..) 사실 플래시는 CPU 점유율이 높아 대부분의 모바일 폰 CPU로는 아직까지 무리가 있지 않을까 싶은 생각도 있구요. 물론 모바일 플래쉬 플러그인을 배포한다고 하지만 그것역시도 약간의 문제가 있을듯 합니다. 아마도 스티브 잡스가 플래시를 배제한 이유중 하나가 아닐까 해요.

 

자바스크립트 역시 마찬가지 입니다.

특히 용량이 큰 이미지, 레이어 등을 좌표를 추적해 돌리게 되면 cpu 혹은 gpu 점유율이 늘고 메모리 또한 많이 먹어서 스마트 폰 의 다운, 혹은 버벅임 등이 나타날꺼라는 예상을 한 가운데 테스트를 진행했습니다.

 

결과로는 예상대로 제 핸드폰(뉴쵸콜릿)에서는 모바일 웹브라우저(모바일 익스플로러 6 기반)로 테스트 결과 엄청난 버벅임 현상이 나타났습니다. 움직이긴 하더라고요..-_-; 이것은 돌아가는 레이어가 1개이든 10개이든 마찬가지 였습니다.

아마도 수학 함수를 개산하여 0.01초 단위로 계산하여 브라우저로 뿌려주는 계산식 자체가 제 휴대폰으로는 무리였지 않을까 싶습니다.

 

두번째로 아이폰(3GS / 모바일 사파리브라우저)으로 테스트 했습니다. 결과는 저의 예상을 깨고 너무도 잘 보였습니다.-_-!!!

물론 PC로 볼때보다 약간의 속도차이는 있었으나 무리없이 처리해 내는 것 을 확인할 수 있었습니다.

모바일 브라우저중 속도가 늦는 쪽에 속하는 사파리 인데도 무난한 처리능력을 보여주네요. 추후에 옴니아1,2 ,블렉베리 등의 스마트 폰으로 추가 테스트를 거쳐봐야 할듯 하지만 곧 요정도의 스크립트도 모바일 브라우저용 페이지로 제작할 수 있지 않을까 라는 생각을 해봤습니다.(물론 당장을 힘들지요. 레이어 안에 이미지, 텍스트 등이 추가된다면 아이폰에서도 분명 속도 저하 현상이 발생할 것 입니다.추측..)

 

일단 브라우저에서 자바스크립트를 구현할때 어느정도 처리속도를 보이는가 에 대해서는 만족스러운 결과 였습니다.

결론은 아직은 무리 일 수도 있다..라는 것이지만요-_-;

 

또다른 테스트는 http://www.superweb.kr/ddd.html (소스 블루비 펌( http://www.blueb.co.kr/ ))

를 모바일브라우저로 확인하여 드레그 엔 드롭이 가능한가 였습니다.

결과는 위 테스트 헨드폰 두기종 모두 불가능 이었습니다.

또한 예상대로 이미지(jpg) 용량때문인지 아이폰에서도 움직임이 부자연 스러웠습니다.

일반적으로 사용하는 onmousedown, onmouseup 이벤트 헨들러는 터치폰, 비 터치폰 모두에서 사용이 불가한듯한 예상입니다.

그러나 아예 불가능 한 것 이 아니라는 것 을 보여주는 사이트가 있었는데요.

 

http://m.sevnthsin.com/iphone

위 사이트는 모바일 브라우저에서만 동작됩니다.(아이폰만 확인,css3 지원가능 모바일 브라우저용인듯 합니다)

아이콘을 드래그해서 원안에 넣으면 이벤트가 동작하네요.

소스는 좀더 확인해 봐야 할듯 합니다.

 

스마트폰의 등장, 스마트폰 하드웨어의 고사양화 등(요즘은 피쳐폰도 고사양으로 나오는듯...)으로 모바일 웹이 한층더 발전할 듯 보여집니다.

스마트폰 이용자중 대다수가 집에서도 스마트폰으로 인터넷을 한다고 하니까요.

오늘은 자바스크립트에 관련된 내용들이 주였지만 앞으로 html, css , width, height 등의 테스트를 좀더 많은 모바일기기로 테스트해서 올리도록 하지요.

 

추가적인 의견, 오류, 조언등을 달아주세요. 많은 분들께(물론 저 포함)도움이 됩니다.

 

감사합니다~^^




  • 모토로이 (모토로라/안드로이드) 에서 테스트 결과 보고해 드립니다.

    1. http://www.superweb.kr
    정상작동합니다. PC에서 보는 것에 비해 속도가 다소 느리긴 했습니다만, 이것은 cpu 처리속도가 부족해서라기보단 렌더링 방식의 차이가 아닐까 추측하고 있습니다. (프레임은 전혀 떨어지지 않았기 때문입니다) 좌측 상단 좌/정지/우 내비게이션도 정상적으로 작동합니다.

    2.http://www.superweb.kr/ddd.html
    사진을 직접 클릭하는 이벤트는 발생합니다만 아이폰과 비슷한 정도로 움직임이 부자연스럽습니다. (=프레임이 떨어집니다) 하단 내비게이션 drag n drop 은 아예 되지 않습니다.

    3. http://m.sevnthsin.com/iphone
    drag n drop 작동됩니다. 프레임이 매끄럽지는 않은 수준이라 아쉽습니다.


2010년 3월 23일 화요일

Math를 이용한 좌표따라 돌리기

자바스크립트 수학함수(?)인 Math를 이용해서 레이어를 한번 뺑글뱅글 돌려 봅시다-_-;

이걸 해결하기 위해 정말 애먹었음. 역시 공부를...ㅡㅡ;

 

다운받아 보면 됨..-_-;

 

대략 중요한 공식은..아..나중에 써야..

2010년 3월 2일 화요일

pre태그

줄바꿈 등을 br테그 없이 마크업한 그대로 웹상에 그대로 노출 시킬때 사용하는 태그이다.

<pre>
코드입니다.
하하...
</pre>

와 같이 사용하며,

코드입니다.
하하...

로 출력 된다.

익스플로러 체크하기

유저가 사용중인 브라우저가 익스플로러인지 아닌지를 확인하는 소스 이다.
소스는 굉장히 비효율적인 방법으로 코딩되어 있는데, 익스5.5 부터 익스 8까지를 각각 확인 한 후 아닐경우  else로 넘긴다.

function BrowserCheck(){
 var appname = navigator.appName;
 var useragent = navigator.userAgent;
 if(appname == "Microsoft internet Explorer") appname ="IE";
 IE55 = (useragent.indexOf('MSIE 5.5')>0); //5.5버전
 IE6 = (useragent.indexOf('MSIE 6')>0); //6버전
 IE7 = (useragent.indexOf('MSIE 7')>0); //7버전
 IE8 = (useragent.indexOf('MSIE 8')>0); //8버전
 if(appname == "IE" && IE55 || IE6 ||IE7 || IE8){
  alert('익스플로러 입니다');//익스일경우 실행할 함수  

 }else{
  alert('익스가 아닙니다.');//익스가 아닐경우 실행할 함수
  return false;
 }
}



익스6 png배경을 위한 스타핵(별핵)

익스 6에서 png를 사용하면 투명한 부분이 회색으로 나온다.
구글에서는 익스 6을 버렸지만  국내에서는 아직 익스6을 무시할 수 없다.

스타핵의 사용법은 다음과 같다.

.trans_layer{width:800px; height:100px; background:url('labg.png') repeat left top; }


 * html .trans_layer {background:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='labg.png',sizingMethod='scale'); }


스타핵을 사용하면 익스6에서도 동일하게 png를 사용할 수 있다. 주의할 점은 png배경을 준 클래스 다음에 스타핵을 추가해야 한다.

또한 이경우 익스 6에서 png배경이 깔린 부분만큼 a,input등이 먹지 않는 버그가 발생하는데, position:relative를 a,input등에 먹이면 해결된다.


가끔 무슨이유인지 relative를 먹여도 해결되지 않을 경우가 있는데 이때에는 a등이 있는 것을 div등으로 묶어서 absolute로 png배경위에 레이어로 띄우면 해결된다..(귀찮지만..-_-;)

한국 디지털 대학교..재입학 했다.

흠...드디어 재입학..

난이제 죽었다.
4년안에 졸업은 할 수 있으려나..-_-;
그나저나 학교 홈페이지 개판이던데..(이놈의 직업병...)
최소한 디지털 대학교 라면, 표준, 접근성은 보장되어야 하는 것 아닌가.

본교 홈페이지 자유게시판(이하 자게)에도 올렸으나..하도 울화통이 터져서..
지금 본교 홈페이지 자게는 총학생회장 선출 비리 때문에 난리도 아니다.

개인정보 입력란에 보니 사용하는 기본브라우저 및 운영체제 묻더라..
밑에 자기네 홈페이지는 익스 플로러를 사용해야 강의를 들을 수 있단다.
참 부끄러운 일이다.
본인이 생각하는 사이버대학이란 가장 최소한으로 다음과 같은 사항은 준수 되어야 한다고 생각한다.

첫째, 모든 브라우저로 접근, 글쓰기, 강의 듣기, 파일다운로드 등의 행위가 가능해야 한다.
언제까지 우리나라 사람들이 마이크로소프트 익스플로러만을 사용할 것이라고 생각하는지 ...
현재 한디대 홈페이지는 익스플로러를 제외한 나머지 브라우저를 전혀 지원하지 않고 있으며,
심지어 강의를 듣기위해서는 공인인증서 로그인을 해야 한다.(그것도 년 4400원씩 내는 범용!!)
이를위해 보안 엑티브엑스를 쭉쭉...설치한다. 다른 브라우저로는 결코 강의를 들을수 없다.
회사 PC에서는 타 브라우저로 아예 로그인 조차 안되더라.
익스8 및 비스타에서도 많은 문제가 있나보다. 강의듣기 우측에 익스8 및 비스타 문제 해결 방법이 링크 되어 있는 것 으로 추측했다. 다른 브라우저로 수강신청의 결제까지는 바라지도 않는다. 하지만 이건 조금 많이 심했다.

둘째, 뭐..이것도 비둥비둥한 말이지만 정말이지 게시판이 뭐 이런게 있나 싶다.
방식의 문제이다. 다른 게시판은 사용할 생각도 안해봤다. 이건 딱 자유게시판만 사용해본뒤 적는거다.
페이지 넘어가는게 자바스크립트로 페이지만 다시받아오는 방식이다.
요거의 문제는 백스페이스(뒤로)를 누르면 자동으로 1페이지로 가버린다는 것.
뭐..그래서 목록버튼 이 있는 거겠지만...

셋째, 모바일 등 pc가 아닌 다른 기기로의 접근을 가능하게 해주어야 한다.
요즘은 스마트 폰 및 기타 기기들로 인터넷이 가능해 졌다. 따라서 모바일 웹 브라우저 등의 접근을 용이하도록 하여야 한다. 바쁜직장생활 등으로 틈틈히 공부해야 하는 직장인들에게 사이버 대학은 평생 교육 이라는 새로운 환경을 제공했지만 이미 너무 뒤쳐졌다. 지금은 카메라로 길을 찾는 증강현실, 그리고 어디서나 인터넷을 하는 3G및 와이파이 인프라가 대중화 되어 있는 단계이다. 집에서도 스마트폰으로 인터넷을 접속할 정도로 이미 많은 사람들이 모바일 웹을 사용하고 있는 추세인데 비해 한디대는 조치가 매우 미흡 하다 못해 아예 멈춰  있다.
학생들이 언제까지 개인용PC앞에 앉아 인터넷 강의를 들을 것 이라고 생각하는지...발빠른 대처가 필요할 것 이다.

넷째, 위와 같은 내용을 분명 학교측에서는 인정하고 정정해야 할 것이다.
학생들의 말에 귀 귀울이고 개선해야 할 사항이지만, 계획이 있는지 없는지도 모르겠다.
타 업체에 외주를 주는듯 한데, 사이버 대학에서 홈페이지는 곧 학교의 건물이요, 강의실이며, 편의 시설이다.
한디대 홈페이지는 이미 노후화 되었다. 즉 건물이 부실하다는 말이다. 언제고 무너져 버릴듯 부실하며, 불안정하다.

이런 현실을 보니 맘이 답답하다.
지금 보니 학교 홈페이지 게시판은 학생회장 선출 문제로 뜨겁디 뜨거운데, 그럼 과연 학생회장 문제가 사그러 들때즈음 위와같은 문제가 화두가 되었을때, 자유게시판은 다시 뜨거워 질지 의문이다.
우리나라 웹의 현실을 보는듯 해 마음이 아프다.

부디 다른 사이버대학이 혁신적으로 개선 하여, 한디대도 발전을 하게 되었으면 한다.