2014-05-16 6 views
1

마우스와 터치를 모두 지원하는 하이브리드 장치 의 이벤트를 감지하고 바인딩하는 데 권장되는 방법은 무엇입니까? 예를 들어하이브리드 장치 감지

, 모더 나이저가 hybrid라는 테스트가 있다면, 당신은 다음과 같이 할 수 있습니다

var handler = null; 

switch (true) { 
    case (Modernizr.hybrid): 
    handler = 'touchstart click'; 
    break; 
    case (Modernizr.touch): 
    handler = 'touchstart'; 
    break; 
    default: 
    handler = 'click'; 
    break; 
} 
+1

그냥 때마다 클릭과 함께 그것을 touchstart 바인딩 이벤트가 시작되지 않으면 아무런 상처를 입지 않을 것입니다 ... – dandavis

답변

4

@ 단다 비츠가 그의 의견에서 말했듯이, 모두 묶어 라.

비록 약간의 지적이 될 수 있습니다 : 사용자가 터치 또는 마우스 (키보드 또는 다른 입력 장치)를 사용할지 여부는 모르지만 다른 이벤트 모델 (포인터/터치) - 따라서 오직 일 수도 있고 화재를 묶을 수 있습니다.

모든 입력 장치는하지만 click 이벤트를 발생, 그래서 당신은 항상 바인딩 있는지 확인하고 당신이 덮여있어 수 있습니다

if ('onpointerdown' in window) { 
    // Bind to Pointer Events: `pointerdown`, `pointerup`, etc 
} 
else { 
    // Bind to mouse events: `mousedown`, `mouseup`, etc 

    if ('ontouchstart' in window) { 
     // Bind to Touch Events: `touchstart`, `touchend`, etc 
    } 
} 
// Bind to keyboard events: `keydown`, `keyup`, etc if 
// necessary; can be problematic though 
// Always bind to `click` events 

더 자세히 : http://www.stucox.com/blog/the-golden-pattern-for-handling-touch-input/

+0

위대한 응답과 블로그 포스트 - 응답 주셔서 감사합니다 – cantera

+0

'탭 '이벤트는 어떻게됩니까? 긴 탭을 무시하고 스 와이프 등을 처리 할 수 ​​있도록 'touchstart'뿐만 아니라 바인딩 할 필요가 있습니다.이 이벤트 외에도 클릭 이벤트에 바인딩하면 콜백이 두 번 실행됩니다. –

+1

@AdamFraser -'tap'은 표준 DOM 이벤트가 아닙니다 ... 도서관을 사용하고 있습니까, [hammer.js] (http://hammerjs.github.io/)? 그렇다면 Hammer의 이벤트 모델을 사용하고 표준 터치 이벤트와 믹싱하지 말 것을 권장합니다 (동일한 요소가 아님). 해머만으로 필요한 모든 작업을 수행 할 수 있습니다. –

0

불행하게도, you can't detect a touchscreen는, 따라서, 당신은 hybriddevice를 감지 할 수 있습니다.

샘플 코드에 따라 그 가치가있는 모든 것에 대해 click이 실행됩니다. 당신이 성취하고자하는 것에 관해 더 많은 정보를 제공한다면 나는 더 많은 가능성을 제안 할 수 있습니다.