En Mobile Safari y Android, aquí hay una forma precisa de medir cuánto se ha acercado la página.
Pruébelo aquí: http://jsbin.com/cobucu/3 - cambie el zoom y luego haga clic en medir.
técnica consiste en añadir un div nivel superior:
<body>
<div id=measurer style="position:absolute;width:100%"></div>
y utilizar el cálculo:
function getZoom(){
return document.getElementById('measurer').offsetWidth/window.innerWidth;
}
El único problema es encontrar una manera ordenada para detectar que el usuario ha cambiado el zoom (pinch , doble toque, etc.).Opciones:
- webkitRequestAnimationFrame: muy fiable, pero es probable que causan jankiness si se utiliza animaciones (debido al impacto en el rendimiento)
- setInterval:
- eventos táctiles fiables pero muy feos: buscar dos dedos o doble toque : feo y tal vez difícil de hacer 100% confiable
- window.onresize + window.onorientationchange + window.onscroll: simple pero totalmente no confiable (Editar: y onscroll puede causar problemas de rendimiento en WKWebView o Mobile Safari 8 o superior).
PS: Windows Phone necesita una solución diferente (pinch-zoom no cambia la vista - pinch-zoom en Windows tiene su propia ventana separada que no es visible a javascript).
google fastflip (http://fastflip.googlelabs.com/) lo hace, por lo que es ciertamente posible – cobbal
¿Tiene una actualización por venir? ;) – alex