2013-03-14 18 views
20

Attualmente nella mia applicazione sto catturando gli eventi della rotellina del mouse ed eseguo lo zoom avanti o indietro su un elemento Canvas. Se l'utente utilizza Mac e tenta di eseguire lo zoom con il trackpad, non vi è alcun evento e ciò che effettivamente accade è lo zoom in/out del browser.Catching Mac trackpad zoom

C'è un modo per catturare l'evento di zoom eseguito con il trackpad?

+0

Questo aiuto? http://stackoverflow.com/questions/2916081/zoom-in-on-a-point-using-scale-and-translate –

+1

No, come ho detto, non ho un problema con onmousewheel –

+0

Right. Questo articolo di IBM http://www.ibm.com/developerworks/library/wa-games/index.html?cmp=dw&cpb=dwwdv&ct=dwnew&cr=dwnen&ccy=zz&csr=080312 mi ha indirizzato a Modernizr http://modernizr.com/ docs/che IBM sembra utilizzare per rilevare eventi "touch". Potrebbe aiutare. –

risposta

-5

Non v'è alcun modo per catturare il pinch-zoom in/zoom-out del trackpad con solo il JavaScript

+0

semplicemente sbagliato come dimostrato sopra –

0

Dopo aver cercato, questo aiuta qualsiasi? copre sia l'app Web sia javascript nella sua discussione e arriva a hammer.js come una possibile soluzione per rilevare gli eventi di pizzico ... Simplest way to detect a pinch

+0

gesturestart ecc. non sono supportati da Safari desktop. –

1

Per quanto ne so, il trackpad pizzico non attiva gli eventi di tocco o di gesto , quindi Hammer.js non lo rileverà.

Sono stato in grado di simulare il rilevamento pizzico in Chrome utilizzando Hamster.js. Attiva l'evento rotellina del mouse e puoi utilizzare il delta per determinare se l'utente sta eseguendo lo zoom avanti o indietro.

Questa soluzione non ha funzionato in Safari però.

20

Almeno in Chrome, il trackpad "pinch-to-zoom" attiva un evento ruota/rotellina del mouse che appare come se si premesse il tasto ctrl. Puoi catturare questo evento come qualsiasi altro evento ruota/rotellina del mouse e impedire che si verifichi il suo default. Ecco un esempio utilizzando jQuery:

$("canvas").on("mousewheel", function(e) { 
    if (e.ctrlKey) { 
     e.preventDefault(); 
     e.stopImmediatePropagation(); 

     // perform desired zoom action here 
    } 
}); 
+2

A partire da Chrome 45.0.2421.0, questo non è più il caso. –

+0

@PhpMyCoder Hai un riferimento o un commit per quello? – sgrove

+0

@sgrove Sfortunatamente, non ho un commit. Ma ho Chrome 45.0.2421.0, e posso confermare che non funziona più. –

3

Starting from Safari 9.1 si può prendere di zoom e rotazione eventi da dispositivi OSX. Per maggiori informazioni leggere lo GestureEvent Class Reference. Si noti che questo funziona solo in Safari ma poiché la tua domanda riguardava lo "Mac zoom del trackpad" Penso che questo sia quello che stai cercando.


Nota a margine: questi eventi sono supportati anche in Safari su iOS.