기본 콘텐츠로 건너뛰기

html click 이벤트가 모바일에선 300ms가 느리다!!?

안녕하세요 광흠입니다.


이번 포스팅은 "html 클릭 이벤트가 모바일에선 왜 느릴까?" 주제로 하겠습니다




일단 동영상을 한번 시청해보시면 차이를 아실거라 생각이 듭니다
(youtube에서 찾은 비교 영상입니다.)

왼쪽은 일반 click이벤트이고 우측이 touch 영상입니다.

육안으로도 확연히 차이가 심합니다.

자료를 찾아보니 모바일에서는 더블탭이 될지도 모르기 때문에 300ms를 대기 시간으로 둔다더군요 그래서 모바일에선 touch 이벤트가 존재합니다

종류는 아래 보시면 되겠습니다


  1. touchstart (스크린에 손가락이 닿았을때 발생한다)
  2. touchmove (스크린에 손가락이 닿아있고 움직일때 발생한다)
  3. touchend (스크린에서 손가락이 떨어졌을 경우 발생한다)
  4. touchcancel (시스템에서 이벤트를 취소시킬 때 발생하지만 브라우저마다 다르다)


이렇게 이벤트를 사용하여 반응형 웹 또는 모바일 웹을 제작할때 touch이벤트를 잘 사용하도록 하자.

여기서 주의할 점은 touch이벤트를 사용할때 컴퓨터의 웹에선 동작하지 않습니다.

그래서 click이벤트와 같이 사용을 해주셔야하는데요


1
2
3
4
5
6
7
8
9
10
11
12
13
//모바일에서 touch이벤트와 click이벤트가 같이 발생할때 click을 취소하는 펑션입니다.
function eventHandler(event, selector) {//
    event.stopPropagation();
    event.preventDefault();
    if (event.type === 'touchend'){
        selector.off('click');
    }
}
//위의 평션은 이렇게 이벤트와 element를 넘겨주시면 되겠습니다.
$(selector).on('touchend click'function(event) {
    eventHandler(event, $(this));
    nextMenu();
});


이상으로 포스팅을 마치겠습니다 ^^

감사합니다.

댓글

이 블로그의 인기 게시물

Ext JS 4.2 트리 기본 구조

Ext.require([ '*' ]); Ext.onReady( function (){      var   store = Ext.create( 'Ext.data.TreeStore' , {             id: 'store' ,             proxy: {             data : data             type: 'memory' ,             reader:{                 type: 'json '             }         },         root: {             text: "ROOT" ,             id: "ROOT" ,             expanded: tru e         }     });      var  tree = Ext.create( 'Ext.tree.Panel' , {         id: 'tree' ,         rootVisible: true ,         multiSelect: false ,         store: store,         height: 600,         renderTo: Ext.get( 'treeList' )     });  }); 필자가 생각하기에 Ext Js 트리 가장 기본 옵션인거 같다. 실 작동 URL[ http://jsfiddle.net/Kwangheum/vkbSS/ ] Ext JS 4.2 트리 1. Ext JS 4.2 트리 기본구조 2. Ext JS 4.2 트리 이름 변경하기 3. Ext Js 4.2 트리 그리드 에디팅 4. Ext JS 4.2 트리 드래그 & 드롭 5. Ext JS 4.

맥에서 ssh 터널링 하는 방법

이번에 작업하면서 터널링 열어서 접속 해야하는 경우가 발생하였다.. (사실 기존에는 ssh 접속만 했지 깊이 파보진 않아서.. 이번에 처음으로 터널링을 해보았다.) 회사에서 알려준 방법은 windows에서 putty로 하는 방법을 알려줬는데 putty 와 비교하면서 설명을 해보겠다. 회사에서 준건 이렇게 이미지를 받았다. 맥에서는 터널링서버IP와 포트 그리고 터널링을 이용하여 실제 접속하고싶은 IP와 포트를 알면된다. 터미널에서 $ ssh 터널링 접속 아이디@터널링서버 IP -p 22 -N -L 10555:실제 접속하고싶은 IP:22 이렇게 작성을 하시면 실제 터널링을 열어주게 된 것이다.  사용된 옵션 :  -p [number]   : number 포트번호로 접속한다.  -N  : 원격 쉘을 실행시키지 않고 접속만 유지한다.  -L [로컬포트번호:호스트:호스트포트번호]  : 로컬 포트번호로 listen 소켓을 열고 들어오는 패킷을 원격지에서 호스트:호스트포트번호로 전송한다.  [출처 http://blog.lael.be/post/845] 그런다음 새로운 터미널에서 $ ssh (실제 접속하고싶은 IP)에서 사용될 ID@127.0.0.1 -p 10555 이렇게 하면 터널링에 접속이 된다!

Ext JS 4.2 트리 그리드 에디팅

var tree = Ext.create( 'Ext.tree.Panel' , {      id: "gridTree" ,     autoHeight: true ,     renderTo: Ext.get( 'dataArea' ),     useArrows: false ,     rootVisible: false ,     store: store,     multiSelect: true ,     plugins: [          Ext.create( 'Ext.grid.plugin.CellEditing' , {             clicksToEdit: 1         })     ],     rowLines: true ,     columns: 컬럼(column) }); tree.on( 'validateedit' , function (editor, e) {      if (e.record.data[e.field]==e.value){         e.cancel = true ;     } }); tree.on( 'edit' , function (e){     console.log( "필드 값(field value)" +e.context.field);     console.log( "이전  값(before value)" +e.context.originalValue);     console.log( "현재  값(now value)" +e.context.value); }); 필자는 그리드에서 수정 된것을 'validateedit'라는 좋은 옵션이 있는데 'edit' 에서 하고있었다. Ext Js 에서는 수정을 한 후 적용 전에 벨리데이션을 하는 곳이 따로 존재하였다.