Это для Chrome , вслед за user800583 ответ ...
Я потратил несколько часов на эту проблему и не нашел лучшего подхода, но:
- Есть 16 'zoomLevel', а не 10
- Когда Chrome является полноэкранным / развернутым, соотношение составляет
window.outerWidth/window.innerWidth
, а когда это не так, соотношение представляется равным (window.outerWidth-16)/window.innerWidth
, однако к 1-му случаю можно приблизиться ко 2-му.
Итак, я пришел к следующему ...
Но у этого подхода есть ограничения: например, если вы играете на аккордеоне с окном приложения (быстро увеличиваете и уменьшаете ширину окна), вы получите промежутки между уровнями масштабирования, хотя масштаб не изменился (может быть externalWidth innerWidth не точно обновляются в одно и то же время).
var snap = function (r, snaps)
{
var i;
for (i=0; i < 16; i++) { if ( r < snaps[i] ) return i; }
};
var w, l, r;
w = window.outerWidth, l = window.innerWidth;
return snap((w - 16) / l,
[ 0.29, 0.42, 0.58, 0.71, 0.83, 0.95, 1.05, 1.18, 1.38, 1.63, 1.88, 2.25, 2.75, 3.5, 4.5, 100 ],
);
А если вам нужен коэффициент:
var snap = function (r, snaps, ratios)
{
var i;
for (i=0; i < 16; i++) { if ( r < snaps[i] ) return eval(ratios[i]); }
};
var w, l, r;
w = window.outerWidth, l = window.innerWidth;
return snap((w - 16) / l,
[ 0.29, 0.42, 0.58, 0.71, 0.83, 0.95, 1.05, 1.18, 1.38, 1.63, 1.88, 2.25, 2.75, 3.5, 4.5, 100 ],
[ 0.25, '1/3', 0.5, '2/3', 0.75, 0.9, 1, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4, 5 ]
);