В Android вы можете определить текущий масштаб, добавив абсолютный div к телу шириной 100% и разделив divW offsetWidth на 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);
Элемент можно сохранить вМасштабирование 1: 1 путем инвертирования (отмены) величины масштабирования:
// 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' : '';
Изменение масштабирования обнаруживается событием window.onresize
(хотя событие изменения размера задерживается до завершения изменения размера ... вы можете обнаружить масштабированиеначать использовать событие gesturestart
на iPad или событие document.touchstart
и обнаружить 2 пальца вниз.
Редактировать: после трех исправлений, говорящих о том, что это не работает, я подумал, что лучше добавить пример, показывающий, как оно работает,Протестировано работает на: Android 4.1.2 обычный браузер, Android 4.1.2 Chrome, Android Opera Mobile 12.10, iPad 2 iOS4.(Не работает на Android Firefox Mobile и не будет работать в iframe, поэтому jsfiddle не будет работать).
<!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>