Mobile/Android Web2012.08.01 10:53

Mobile Web 페이지 개발시 Android 4.0 이상 버젼에서의 버그 이슈사항입니다.

 

Android 4.0 이상 버젼에서 Touch Start Event 발생 후 드래그 진행시 Touch Move가 발생되고 나서 이벤트가 먹통이 되어버리는 Bug가 있습니다.

 

예를 들어 Android 4.0 미만 버젼과 iOS에서는 사용자가 터치를 시작하고 드래그시 이벤트 발생 순서가

 

TouchStart

TouchMove

TouchMove

.

.

.

TouchEnd

 

위와같이 발생한다면 Android 4.0 이상 버젼에서는

 

TouchStart

TouchMove

---------------------------------------- 이벤트 죽고 화면 스크롤 발생

 

위와 같이 TouchMove Event 이후 브라우져 스크롤이 발생되어 더이상의 이벤트가 발생되지 않습니다.

따라서 슬라이드 등의 Touch Event를 사용하는 스크립트 제작시 TouchMove에서 받는 이동 포지션값과 TouchEnd 이벤트를 잡아낼 수 없습니다.

 

위와 같은 현상을 처리하기 위해서는 Android 4.0 이상 버젼에서 TouchStart 또는 첫 TouchMove 이벤트 발생시 이벤트 전파를 방지 시켜야 합니다.

 

var isAndroid_ver4 = false;

 

if (navigator.userAgent.toLowerCase().indexOf("android 4") > -1)
    isAndroid_ver4 = true;

 

function touchStartHandler(event) {

if (isAndroid_ver4)

event.preventDefault();

}

 

또는

 

function touchMoveHandler(event) {

if (isAndroid_ver4)

event.preventDefault();

}

 

 

위 코드는 예시이고 중요한 점은 첫 TouchMove 이벤트가 발생 후 이벤트 파생을 방지해 주셔야 이벤트가 작동되지 않는 버그를 막으실 수 있습니다. 다른 주의사항은 첫 TouchStart 이벤트 또는 TouchMove 발생시 이벤트 파생을 중지 시킬 경우 화면 스크롤이 되지 않습니다. 만약 화면스크롤인지 객체 슬라이드인지를 분기처리 하실 필요가 있다면 화면 스크롤일 경우 이벤트 파생을 중지 시키시면 안됩니다. 이럴 경우 TouchMove와 TouchEnd가 발생되지 않는다는 생각을 하시고 해당 경우에따라 처리를 해주셔야 합니다.

 

 

저작자 표시 비영리
신고

'Mobile > Android Web' 카테고리의 다른 글

Android 4.0 Web Touch Event Bug (Galaxy Note, Galaxy S3 ...)  (0) 2012.08.01
Posted by 코멧'★

티스토리 툴바