Su Mobile Safari e Android, ecco un modo accurato per misurare quanto è stata ingrandita la pagina.
Provalo qui: http://jsbin.com/cobucu/3 - cambia zoom quindi fai clic su misura.
Tecnica è quello di aggiungere un livello div superiore:
<body>
<div id=measurer style="position:absolute;width:100%"></div>
e utilizzare il calcolo:
function getZoom(){
return document.getElementById('measurer').offsetWidth/window.innerWidth;
}
L'unico problema è trovare un modo ordinato per rilevare che l'utente ha modificato zoom (pinch , doppio tocco, ecc.).Opzioni:
- webkitRequestAnimationFrame: molto affidabile, ma che possa causare jankiness se si utilizza animazioni (a causa di calo di prestazioni)
- setInterval: affidabili, ma molto brutto
- eventi touch: cerca due dita o doppio tap : brutto e forse difficile da rendere affidabile al 100%
- window.onresize + window.onorientationchange + window.onscroll: semplice ma totalmente inaffidabile (Modifica: e onscroll può causare problemi di prestazioni in WKWebView o Mobile Safari 8 o versioni successive).
PS: Windows Phone ha bisogno di una soluzione diversa (pinch-zoom non cambia la finestra - pinch-zoom su Windows ha la sua propria finestra separata che non è visibile a JavaScript).
google fastflip (http://fastflip.googlelabs.com/) lo fa, quindi è certamente possibile – cobbal
Hai ricevuto un aggiornamento? ;) – alex