2012-04-23 23 views
7

¿Hay alguna manera de enlazar un evento de doble toque (en una sola línea de código) para safari móvil? O bien, la alternativa es implementarlo interceptando dos eventos de un solo toque que ocurrieron en un corto tiempo dado (ejemplo: http://appcropolis.com/blog/implementing-doubletap-on-iphones-and-ipads/)?Doble toque en safari móvil

+0

¿No se usa la pestaña doble para ampliar? ¿Se activan 2 eventos tap en el navegador? – Undefined

+0

mismo evento que se utiliza para el zoom y me gustaría anular el comportamiento para una situación dada concreta – BreakPhreak

+0

Disculpe si no estoy relacionado con su problema pero si muestra una página web puede especificar la configuración de la ventana gráfica en la metaetiqueta. Puedes ver esto en el iwebkit desde snippetspace. –

Respuesta

6

Respuesta corta: debe implementar a través de dos clics.

respuesta real: Aquí es una aplicación jQuery libre de doble toque para Safari móvil que sólo requiere una línea de código (para habilitar dblclick evento):

Además, es probable que necesite disable mobile Safari's default zoom con esta metaetiqueta:

<meta name="viewport" content="width=device-width,user-scalable=no" /> 
0

Invalidar dblclick evento y utilizar bind, live, on, delegate como para cualquier otro evento:

jQuery.event.special.dblclick = { 
    setup: function(data, namespaces) { 
     var elem = this, 
      $elem = jQuery(elem); 
     $elem.bind('touchend.dblclick', jQuery.event.special.dblclick.handler); 
    }, 

    teardown: function(namespaces) { 
     var elem = this, 
      $elem = jQuery(elem); 
     $elem.unbind('touchend.dblclick'); 
    }, 

    handler: function(event) { 
     var elem = event.target, 
      $elem = jQuery(elem), 
      lastTouch = $elem.data('lastTouch') || 0, 
      now = new Date().getTime(); 

     var delta = now - lastTouch; 
     if(delta > 20 && delta<500){ 
      $elem.data('lastTouch', 0); 
      $elem.trigger('dblclick'); 
     }else 
      $elem.data('lastTouch', now); 
    } 
}; 
+0

funciona en safari, pero no funciona en el escritorio de cromo – alpere

3

Si usted quiere tener trabajo doble clic tanto en el navegador y la plataforma de IOS, usted debe tener el siguiente código:

jQuery.event.special.dblclick = { 
    setup: function(data, namespaces) { 
     var agent = navigator.userAgent.toLowerCase(); 
     if (agent.indexOf('iphone') >= 0 || agent.indexOf('ipad') >= 0 || agent.indexOf('ipod') >= 0) { 
      var elem = this, 
       $elem = jQuery(elem); 
      $elem.bind('touchend.dblclick', jQuery.event.special.dblclick.handler); 
     } else { 
      var elem = this, 
       $elem = jQuery(elem); 
      $elem.bind('click.dblclick', jQuery.event.special.dblclick.handler); 
     } 
    }, 
    teardown: function(namespaces) { 
     var agent = navigator.userAgent.toLowerCase(); 
     if (agent.indexOf('iphone') >= 0 || agent.indexOf('ipad') >= 0 || agent.indexOf('ipod') >= 0) { 
      var elem = this, 
       $elem = jQuery(elem); 
      $elem.unbind('touchend.dblclick'); 
     } else { 
      var elem = this, 
       $elem = jQuery(elem); 
      $elem.unbind('click.dblclick', jQuery.event.special.dblclick.handler); 
     } 
    }, 
    handler: function(event) { 
     var elem = event.target, 
      $elem = jQuery(elem), 
      lastTouch = $elem.data('lastTouch') || 0, 
      now = new Date().getTime(); 
     var delta = now - lastTouch; 
     if (delta > 20 && delta < 500) { 
      $elem.data('lastTouch', 0); 
      $elem.trigger('dblclick'); 
     } else { 
      $elem.data('lastTouch', now); 
     } 
    } 
}; 

Inténtelo aquí:

http://jsfiddle.net/UXRF8/

+0

Awesome code. Funcionó perfectamente –

Cuestiones relacionadas