!(function () {
var docElem = document.documentElement,
metaElem = document.querySelector('meta[name="viewport"]'),
dpr = window.devicePixelRatio || 1,
// 将页面分为10块
blocks = 10,
// 需要限制的最小宽度
defaultMinWidth = 300,
// 需要限制的最大宽度
defaultMaxWidth = 640,
// 计算的基准值
calcMaxWidth = 9999999;
if (!metaElem) {
metaElem = initMetaViewport();
}
if (metaElem.getAttribute('data-content-max') !== null) {
calcMaxWidth = defaultMaxWidth;
}
// 确保meta[name="viewport"]存在
function initMetaViewport() {
var meta = document.createElement('meta');
meta.setAttribute('name', 'viewport');
meta.setAttribute('content', 'width=device-width,initial-scale=1,user-scalable=no');
document.head.appendChild(meta);
return meta;
}
// 大部分dpr为2以下的安卓机型不识别scale,需设置不缩放
if (navigator.appVersion.match(/android/gi) && dpr < 2) {
dpr = 1;
console.log(dpr);
}
setScale(dpr);
// 企业QQ设置了scale后,不能完全识别scale(此时clientWidth未收到缩放的影响而翻倍),需设置不缩放
if (navigator.appVersion.match(/qq\//gi) && docElem.clientWidth <= 360) {
dpr = 1;
setScale(dpr);
}
docElem.setAttribute('data-dpr', dpr);
// 设置缩放
function setScale(dpr) {
var sale = (1 / dpr);
//$('.log').append('缩放大小=>' + sale + '
');
console.log(sale);
metaElem.setAttribute('content', 'initial-scale=' + sale + ',maximum-scale=' + sale + ',minimum-scale=' + sale + ',user-scalable=no');
}
// 设置docElem字体大小
function setFontSize() {
//setScale(dpr);
var clientWidth = docElem.clientWidth;
console.log(clientWidth);
$('.log').append('默认宽度=>' + clientWidth + '
');
clientWidth = Math.max(clientWidth, defaultMinWidth * dpr);
$('.log').append('dpr宽度=>' + clientWidth + '
');
// 调整计算基准值
if (calcMaxWidth === defaultMaxWidth) {
clientWidth = Math.min(clientWidth, defaultMaxWidth * dpr);
}
$('.log').append('最终宽度=>' + clientWidth + '
');
var fontsize = clientWidth / blocks + 'px';
$('.log').append('字体大小=>' + fontsize + '
');
$('.log').append('字体大小=>' + metaElem.getAttribute('content') + '
');
console.log(clientWidth);
docElem.style.fontSize = fontsize;
}
setFontSize();
if (navigator.appVersion.match(/uc\//gi)) {
$(document).ready(function () {
setScale(dpr);
});
}
window.addEventListener(window.orientationchange ? 'orientationchange' : 'resize', setFontSize, false);
})();