2012-04-05 12 views
5

Im el desarrollo de una aplicación móvil usando PhoneGap y jQuery Mobile. Creé el diseño con roles de datos, etc ... y en esta aplicación tengo muchos botones como los siguientes para ir a diferentes páginas. (No enlace específicamente los eventos de clic a estos botones, solo usan el href para la magia).Reemplazar todos los eventos de clic con el grifo en jQuery Mobile para acelerar

<a data-role="button" href="#page6"> 
    go to page 6 
</a> 

El problema con estos botones es que son increíblemente lento, con el retardo de 400ms every1 está hablando. ¿Es posible sustituir todos los eventos en estos botones con grifo/VHAGA CLIC/touchstart (Lo que sea bueno) para que respondan instante? Ellos nunca tendrán que hacer frente a los grifos dobles o personas dragreleasing ...

Gracias

Respuesta

13

escribí a JS utility called Lightning Touch para deshacerse de exactamente eso retrasar. Here's me demonstrating it (badly).

La base de esa biblioteca son los botones rápidos de Google, que aparentemente ya no está disponible (o si es así, la URL ha cambiado) pero solía estar disponible bajo la licencia Creative Commons de code.google.com.

Lightning Touch se activa en touchend en vez de touchstart, pero sospecho que puede modificarlo para trabajar en touchstart sin demasiado esfuerzo, si no funciona como es para usted.

En una presentación, Brian Leroux tenían a slide about the 400ms-ish delay issue that said "PPL HAVE SOLVED THE SHIT OUT OF THIS." Él vinculado a unos proyectos que lo podría hacer en caso de Rayo táctil no funciona para su situación. Y si esos te fallan, puedes intentar mirar a través del this other list that he linked to in the same presentation.

espero que haya una solución en alguna parte para usted. (Y si Lightning Touch no funciona, me gustaría saber exactamente por qué para poder mejorarlo.)

+0

Gracias hombre, especialmente desde la pregunta de semanas atrás :) Esto realmente funcionó, y estudiando su código aprendí algunos trucos ingeniosos en el camino. tata –

+0

Me alegro de que funcionó. Si terminas usando la utilidad en un sitio de producción, avísame y agregaré un enlace al sitio en el archivo README. – Trott

+0

Este es el código de Google Fast Buttons - https://developers.google.com/mobile/articles/fast_buttons – Gavin

0

Este plugin será de gran ayuda

$.fn.addTouch = function() { 
    if ($.support.touch) { 
      this.each(function(i,el){ 
        el.addEventListener("touchstart", iPadTouchHandler, false); 
        el.addEventListener("touchmove", iPadTouchHandler, false); 
        el.addEventListener("touchend", iPadTouchHandler, false); 
        el.addEventListener("touchcancel", iPadTouchHandler, false); 
      }); 
    } 
}; 

http://code.google.com/p/jquery-ui-for-ipad-and-iphone/

+1

no jquery móvil exponer esos eventos (tocar etc.) de todos modos? No estoy seguro de cómo esto funcionaría para reemplazar los clics y luego agregar funcionalidad en lugar de reemplazarla. –

+0

Gracias por señalar esto, pero esta no es la respuesta que estoy buscando, por desgracia .... –

3

prueba esta biblioteca: quojs funcionó perfectamente para mí.

He aquí un ejemplo de ello (la función táctil es bastante rápido) Estoy cambiando clases aquí:

$$("#man").touch(function(){ 
    switchGender(true); 
}); 

$$("#woman").touch(function(){ 
    switchGender(false); 
}); 

$$(".next").touch(function(){ 
    nextPage(); 
}); 
+1

gracias por señalar eso. –

2

Este código diminuta debería ayudar:

$("a").on("tap",function(e){ 
         $(this).trigger("click"); 
         e.preventDefault(); 
         return false; 
         }); 

Ponerlo en

$(document).on("ready",function(){ 

y listo!

+0

activado ('tap') existe en jQuery mobile. Para JQuery regular necesitarás en ('touchend') – mbokil

0

Este script permite determinar si el dispositivo está habilitado táctil y luego vuelva a eventos de clic con eventos touchend. Agrega eventos táctiles a ambos enlaces y a los atributos del elemento onclick de JavaScript. Script ha sido probado en Android, iPhone, iPad y Windows Phone.

//jQuery doc.ready 
$(function() { 
    addTouchEvents(); 
}); 

addTouchEvents = function() { 
    var isTouchDevice = (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); 

    if (isTouchDevice) { 
     //replace link clicks with ontouchend events for more responsive UI 
     $("a", "[onclick]").on("touchstart",function(e) { 
      $(this).trigger("click"); 
      e.preventDefault(); 
      return false; 
     }); 
    } 
} 
Cuestiones relacionadas