2012-04-23 18 views
7

C'è un modo per associare un evento a doppio tocco (in una singola riga di codice) per il safari mobile? Oppure, l'alternativa è implementarla intercettando due eventi a tocco singolo avvenuti in un breve periodo di tempo (esempio: http://appcropolis.com/blog/implementing-doubletap-on-iphones-and-ipads/)?Doppio tocco sul safari mobile

+0

La doppia scheda non è utilizzata per lo zoom? 2 eventi tap vengono attivati ​​anche nel browser? – Undefined

+0

stesso evento che viene utilizzato per lo zoom e mi piacerebbe sovrascrivere il comportamento per una situazione concreta data – BreakPhreak

+0

Scusa se non sono relativo al tuo problema ma se stai visualizzando una pagina web puoi specificare le impostazioni della vista nel meta tag. Puoi vederlo in iwebkit da snippetspace. –

risposta

6

Risposta breve: è necessario implementare tramite due clic.

risposta reale: Ecco un'implementazione jQuery-libera di doppio tocco per Safari Mobile che richiede solo una riga di codice (per abilitare DblClick evento):

Inoltre, probabilmente avrai bisogno di disable mobile Safari's default zoom con questo meta-tag:

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

Override dblclick evento e utilizzare bind, live, on, delegate come per qualsiasi altro 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

funziona su Safari ma non funziona con il desktop chrome – alpere

3

Se si vuole avere di lavoro fare doppio clic sia sul browser e piattaforma iOS, si dovrebbe avere il seguente codice:

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); 
     } 
    } 
}; 

Provalo qui:

http://jsfiddle.net/UXRF8/

+0

Codice impressionante. Ha funzionato perfettamente –

Problemi correlati