2014-11-12 10 views
7

Chcę tylko zapytać, czy istnieje sposób na zmianę progu zdarzenia touchmove? W mojej aplikacji PhoneGap pojawi się obraz. Jeśli zostanie wyzwolony touchstart, pojawi się inny obraz. Jeśli zostanie wyzwolony touchend lub touchmove, wszystkie obrazy muszą zniknąć. Tu jest mój kodu:Jak zmienić próg "touchmove" w js

$('.greenApple').on('touchend', function (e){ 
    $('body').find('.active').removeClass('active'); 
    $('body').find('.greenApple').addClass('hidden'); 
    flag = true; 
    return; 
}); 

$('.greenApple').on('touchmove', function (e){ 
    $('body').find('.active').removeClass('active'); 
    $('body').find('.greenApple').addClass('hidden'); 
    flag = true; 
    return; 

Jednak próg liczby pikseli, który jest uważany za touchmove jest zbyt mało. Często, gdy tylko naciśniesz obraz (nie zwalniając go, touchend nie jest wyzwalany), obraz znika, ponieważ zostanie wywołane zdarzenie . Czy istnieje sposób zmiany liczby przeniesionych pikseli, która jest uważana za touchmove? Czy są inne sposoby obejścia problemu?

Dzięki.

Odpowiedz

1

nie musi znaleźć klasę, jeśli nie ma i nic złego nie zrobi

$('button').on('touchend', function (e){ 

/*no function whatsoever*/ 

    console.log($("body").find('.active').first().html()); 
    console.log($("body").find('.active').html()); 
/*only here*/ 
    console.log($("body").html()); 

/*just do it this way*/ 

    $('body').removeClass('active'); 
    $('body').addClass('hidden'); 
    flag = true; 
    return; 
}); 
2

Nie można zmienić domyślne zachowanie przeglądarki, ale można korzystać z danych o zdarzeniach do filtrowania małe ruchy, które chcesz stłumić. Atrybut touch parametru zdarzenia podaje informacje o położeniu. Zobacz docs, aby uzyskać szczegółowe informacje.

Zapisz pozycję na początku i porównaj pozycję na touchmove. Usuń elementy ze strony tylko wtedy, gdy jest większy od ustawionego progu.

var flag, x,y, distance = 25; 

    $('.greenApple').on('touchstart', function (e){ 
    x = e.originalEvent.changedTouches[0].pageX 
    y = e.originalEvent.changedTouches[0].pageY 

    }); 

    $('.greenApple').on('touchmove', function (e){ 
    var deltaX = e.originalEvent.changedTouches[0].pageX - x; 
    var deltaY = e.originalEvent.changedTouches[0].pageY - y; 
    var difference = (deltaX * deltaX) + (deltaY * deltaY) 
    if(Math.sqrt(difference) > distance) { 
     $('body').find('.active').removeClass('active'); 
     $('body').find('.greenApple').addClass('hidden'); 
     flag = true; 
    }); 

Oto Working fiddle

+0

Witam przy okazji. Próbowałem tego podejścia z pomocą tego skrzypiec 'http: // jsfiddle.net/achudars/fq75t /'. Nie działa to jednak z moim projektem, ponieważ mam 5 elementów div, które dzielą klasę 'greenapple' oraz klasę' active' lub 'hidden'. Scenariusz: wyskakuje div, uruchamiany jest touchstart i zapisywana jest współrzędna. Jednak nadal mam 4 elementy div, które muszą być w stanie przechowywać współrzędne punktu początkowego, co nie jest możliwe. Mogę to szczegółowo wyjaśnić. – Jeongbebs

+0

Nie jestem pewien, czy rozumiem twój problem. Masz tablicę punktów dotyku, więc masz dostęp do wielu punktów dotyku, jeśli masz interakcję z wieloma elementami div. Będziesz musiał wykonać obliczenie odległości przez macierz, zamiast tylko pierwszego punktu dotykowego. – kindasimple

4

Trzeba zmodyfikować tę właściwość

  • $ .vmouse.moveDistanceThreshold (domyślnie: 10px) - Ponad to, to jest to wydarzenie przewijania. Zdarzenie vmousecancel jest wywoływane, a zdarzenie TouchMove jest anulowane.

Wypróbuj poniższy kod:

<script src="jquery.js"></script> 
<script> 
    $(document).bind("mobileinit", function(){ 
     $.vmouse.moveDistanceThreshold (default: 20px) 
    }); 
</script> 
<script src="jquery-mobile.js"></script> 

Spójrz na tym Official Documentation

+0

Ta odpowiedź wygląda obiecująco. Czy mogę połączyć tam, gdzie mogę to przetestować? – SSS

+0

Zobacz demo wtyczki TouchSwipe, w której można grać z odległością progową. http: // labs.rampinteractive.co.uk/touchSwipe/demos/Basic_swipe.html Dokumentacja do konfiguracji odległości progowej znajduje się w poniższym łączu. http://labs.rampinteractive.co.uk/touchSwipe/docs/symbols/%24.fn.swipe.defaults.html –

0

Store ostatnim kontakcie współrzędne danych elementów i wywołać touchmove obsługi tylko wtedy, gdy ich zmiana jest znacząca.

var treshold = 12345; // set whatever treshold you like 

function storeLastTouch (element, event) { 
    element.data('lastTouch', event.originalEvent.changedTouches); 
} 

$('.greenApple').on('touchstart', function (event) { 
    storeLastTouch($(this), event); 
}); 

$('.greenApple').on('touchmove', function (event) { 
    var lastTouch = $(this).data('lastTouch'), 
     thisTouch = event.originalEvent.changedTouches, 
     delta = ...; // calculate difference in any metric you like 
    if (delta > treshold) { 
     storeLastTouch($(this), event); 
     // ... (perform your handler logic) 
    } 
}); 
Powiązane problemy