Sur Android, vous pouvez calculer le zoom actuel en ajoutant un div absolu au corps de la largeur de 100%, et en divisant le offsetWidth div de window.innerWidth
.
var iPadMeasureWidthNode = window.iPadWNode;
if (!iPadMeasureWidthNode) {
iPadMeasureWidthNode = window.iPadWNode = document.createElement('div');
// .ipad-measure-w {position:absolute; width:100%; top:-1px}
iPadMeasureWidthNode.className = 'ipad-measure-w';
document.body.insertBefore(iPadMeasureWidthNode, document.body.firstChild);
}
var zoominverse = 1000/Math.round(1000 * iPadMeasureWidthNode.offsetWidth/window.innerWidth);
Vous pouvez garder un élément à 1: 1 zoom en inversant (défaisant) la quantité de zoom:
// Not using scale3d because is hardware zooming which is ugly unreadable blurry pixel magnification.
node.style.webkitTransform = (zoominverse > 1) ? 'scale(' + zoominverse + ')' : '';
node.style.webkitTransformOrigin = (zoominverse > 1) ? '0 0 0' : '';
changement Zoom est détecté par window.onresize
événement (même si l'événement Resize est retardée jusqu'à ce redimensionnez est terminée ... vous pouvez détecter le début du zoom en utilisant l'événement gesturestart
sur iPad ou document.touchstart
et détecter 2 doigts vers le bas). Edit: Après trois corrections indiquant que cela ne fonctionne pas, j'ai pensé que je ferais mieux d'ajouter un exemple montrant le fonctionnement. Testé fonctionne sur: Android 4.1.2 navigateur normal, Android 4.1.2 Chrome, Android Opera Mobile 12.10, iPad 2 iOS4. (N'a pas fonctionné sur Android Firefox Mobile, et ne fonctionnera pas dans un iframe alors jsfiddle ne fonctionnera pas).
<!DOCTYPE html>
<html>
<head>
<style>
.ipad-measure-w {
position: absolute;
width: 100%;
top: -1px;
};
</style>
</head>
<body>
<button onclick="alertWidth()">alertWidth</button>
<div style="width: 1600px; height: 100px; background-color: blue;"></div>
<script>
function alertWidth() {
var iPadMeasureWidthNode = window.iPadWNode;
if (!iPadMeasureWidthNode) {
iPadMeasureWidthNode = window.iPadWNode = document.createElement('div');
iPadMeasureWidthNode.className = 'ipad-measure-w';
document.body.insertBefore(iPadMeasureWidthNode, document.body.firstChild);
}
var zoominverse = 1000/Math.round(1000 * iPadMeasureWidthNode.offsetWidth/window.innerWidth);
alert(zoominverse);
}
</script>
</body>
</html>
Pourriez-vous donner un exemple pour des valeurs très imprécises? Quelque chose lien "rapport largeur/hauteur: x/y, largeur réelle/hauteur: a/b". – Daniel
Sur un Droid X fonctionnant sous Android 2.2, largeur d'écran rapportée = 800, largeur d'écran réelle 480. Hauteur d'écran signalée = 1360, hauteur d'écran réelle = 854.Lors du rechargement de la page, hauteur d'écran signalée = 1220, hauteur réelle de l'écran encore = 854 - Peter –
Merci, c'est bizarre. Il ne semble pas avoir quelque chose à voir avec le DPI de l'appareil. – Daniel