2013-04-25 11 views
7

Sto costruendo qualcosa principalmente per l'utilizzo su tablet, in cui l'utente può toccare un elemento sullo schermo e viene applicata una classe. Questo è quello che ho finora:Annulla touchend se touchmove spara

I problemi:

  1. voglio usare eventi di tocco per rimuovere la classe e aggiungere la classe in testa tocco (per renderlo più veloce).
  2. Non voglio che faccia nulla se l'utente scorre (touchmoves).

Ho provato un certo numero di cose, nessuna delle quali ha funzionato. Il più semplice che ho provato (senza successo) è questo:

var dragging = false; 

$(".items").on("touchmove", function(){ 
     dragging = true; 
}); 

$('.items').on("click touchend", function(event){ 
    if (dragging = true){ 
    } 
    else{ 
    $('.items').removeClass('selected'); 
    $(this).addClass('selected'); 
    } 
}); 
+1

'if (trascinando = true)' 'dovrebbe essere solo se (trascinamento)', o meglio ancora 'if (!trascinando) 'quindi sposta tutto nell'istruzione else nell'istruzione if (quindi, non avrai altro). – Jace

+0

Una volta che 'touchmove' una volta, stai impostando 'dragging = true', questo non consentirà altri clic come per il tuo codice. Devi resettare 'dragging = false' dopo che l'evento è finito. – James

risposta

18

Direi questo è un modo più sicuro di farlo

variabile Impostare su false

var dragging = false; 

Impostazione var true ontouchmove (consente di riutilizzare il codice ovunque in la tua app)

$("body").on("touchmove", function(){ 
    dragging = true; 
}); 

Il tuo pulsante

$("#button").on("touchend", function(){ 
     if (dragging) 
     return; 

     // your button action code 
}); 

Ripristino variabile (importante)

$("body").on("touchstart", function(){ 
    dragging = false; 
}); 
7

si desidera utilizzare una delle seguenti operazioni:

if(dragging == true) 

Oppure, semplicemente:

if(dragging) 

Si dovrebbe utilizzare solo un singolo segno = quando si è l'impostazione un valore, mentre due segni == devono essere utilizzati quando controllo un valore. Pertanto, il codice dovrebbe essere simile:

$('.items').on("click touchend", function(event){ 
    if(!dragging) 
    { 
     $('.items').removeClass('selected'); 
     $(this).addClass('selected'); 
    } 
}); 

Si noti come non c'è bisogno di controllare se dragging == true perché non si esegue alcun codice in questo caso. Invece si può semplicemente verificare se dragging == false o, !dragging

+0

per qualche motivo non mi permette di aggiungere la classe "select" sui dispositivi touch, ma funziona bene su desktop/laptop. – EmmaGamma

+0

Ecco un collegamento al sito completo: http://reveriesrefined.com/myftp/Crane/ la console non mostra alcun errore in chrome o firefox. – EmmaGamma

0

in cui è stato il trascinamento di controllo messo

if (dragging == true){ 
    dragging = false; 
} 

else{ 
$('.items').removeClass('selected'); 
$(this).addClass('selected'); 
} 

sarà resettarlo sul rilascio

Anche attenzione per doppia invita gli eventi come a volte innescano due volte su alcune piattaforme migliori per controllare la piattaforma con il primo aiuto per i controlli

var clickEventType=((document.ontouchstart!==null)?'click':'touchend'); 

o

var clickEventType = 'touchend'; 
if(document.ontouchstart!==null) 
{ 
    clickEventType = 'click'; 
} 
Problemi correlati