2013-05-07 1 views
5

jQuery Mobiles 스 와이프 이벤트를 사용할 때 콜백 함수에서 방향과 거리를 구할 수 있습니까? 나는 official docs에서 그것에 대해 아무것도 발견하지 못했습니다.jQuery Mobiles 스 와이프 이벤트로 방향 및 거리를 얻는 방법

TouchSwipe 좋은 대안이지만 나는 tap 이벤트 양식 jQuery Mobile이 필요하고 두 개의 라이브러리를 포함하고 싶지 않습니다.

+0

어떤 플랫폼이 필요합니까? – Gajotres

답변

8

확인하시기 바랍니다 : 그것은 단지 jQuery를 모바일로 작동 할 수 있도록 http://jsfiddle.net/Gajotres/K69AJ/

이 예제는 jQuery를 모바일 이벤트로 이루어진다. Windows 및 Android 플랫폼에서 테스트되었습니다.

Vmouse 이벤트는 데스크톱과 모바일 브라우저 간의 차이를 줄이기 위해 만들어졌습니다.

event.preventDefault(); 

그것은 플랫폼은 터치 움직임 감지와 불쾌한 버그가, 안드로이드 플랫폼에 필요한 :

또한이 라인을 확인할 수 있습니다. 버그 보고서 : http://code.google.com/p/android/issues/detail?id=19827

var gnStartX = 0; 
var gnStartY = 0; 
var gnEndX = 0; 
var gnEndY = 0; 

$(document).on('vmousedown', function(event){ 
    gnStartX = event.pageX; 
    gnStartY = event.pageY; 
    event.preventDefault(); 
}); 

$(document).on('vmouseup', function(event){ 
    gnEndX = event.pageX; 
    gnEndY = event.pageY; 
    var distance = Math.ceil(nthroot(Math.pow((gnEndX - gnStartX),2) + Math.pow((gnEndY - gnStartY),2), 2)); 

    if(Math.abs(gnEndX - gnStartX) > Math.abs(gnEndY - gnStartY)) { 
     if(gnEndX > gnStartX) { 
      alert("Swipe Right - Distance " + distance + 'px'); 
     } else { 
      alert("Swipe Left - Distance " + distance + 'px');  
     } 
    } else { 
     if(gnEndY > gnStartY) { 
      alert("Swipe Bottom - Distance " + distance + 'px'); 
     } else { 
      alert("Swipe Top - Distance " + distance + 'px');  
     }   
    } 

    event.preventDefault();  
}); 

function nthroot(x, n) { 
    try { 
    var negate = n % 2 == 1 && x < 0; 
    if(negate) 
     x = -x; 
    var possible = Math.pow(x, 1/n); 
    n = Math.pow(possible, n); 
    if(Math.abs(x - n) < 1 && (x > 0 == n > 0)) 
     return negate ? -possible : possible; 
    } catch(e){} 
} 
+0

+1 답변. – Omar

1

hammer.js를 사용할 수도 있습니다. 스 와이프 및 탭과 같은 두 가지 이벤트가 있습니다. hammer.js에서 방향과 거리를 얻을 수 있습니다. 탭 이벤트는 최신 jQuery 버전의 일부이기도합니다. 탭 이벤트에만 jquery-mobile을 포함 할 필요가 없습니다.

Documentation hammer.js

는 당신을 위해 작동 바랍니다.

관련 문제