70.JS---利用原生js做手机端网页自适应解决方案rem布局

Posted sqyambition

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了70.JS---利用原生js做手机端网页自适应解决方案rem布局相关的知识,希望对你有一定的参考价值。

               利用原生js做手机端网页自适应解决方案rem布局

刚开始我用的是下面这段代码,然后js通过外部链接引入,最后每次用手机刷新网页的时候都会出现缩略图

function getRem(pwidth, prem) {
var html = document.getElementsByTagName("html")[0];
var oWidth = document.body.clientWidth || document.documentElement.clientWidth;
html.style.fontSize = oWidth / pwidth * prem + "px";
}

$(document).ready(function () {
getRem(750, 100);
});

技术图片



然后我试着写在html页面,也会出现短暂的缩略图,作为一个处女座的我来说,是绝对不允许的。
所以我在网上找了很多代码,发现他们有的只能在电脑上F12测试,并不能用手机上面的浏览器进行测试,还有其他一些也不能兼容。
最后我找到了网易的rem自适应代码。

(function(doc, win) {
    var docEl = doc.documentElement,
isios = navigator.userAgent.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/),
dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,
dpr = window.top === window.self ? dpr : 1, //被iframe引用时,禁止缩放
dpr = 1,
scale = 1 / dpr,
resizeEvt = ‘orientationchange‘ in window ? ‘orientationchange‘ : ‘resize‘;
docEl.dataset.dpr = dpr;
var metaEl = doc.createElement(‘meta‘);
metaEl.name = ‘viewport‘;
metaEl.content = ‘initial-scale=‘ + scale + ‘,maximum-scale=‘ + scale + ‘, minimum-scale=‘ + scale;
docEl.firstElementChild.appendChild(metaEl);
var recalc = function() {
var width = docEl.clientWidth;
if (width / dpr > 750) {
width = 750 * dpr;
}
// 乘以100,px : rem = 100 : 1
docEl.style.fontSize = 100 * (width / 750) + ‘px‘;
};
recalc()
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
})(document, window);

经过测试,在电脑上和手机上的测试,都兼容所有分辨率的手机,并且还能随着屏幕宽度进行实时变化。
这样就不用考虑 $(window).resize(function () {})

唯一的不便就是不能通过外部链接的形式引入js,只能写在每个页面的head里面,用内联的方式写进html页面。

上面的比例是750:100,按照设计图上面,所有大小都要除以100.
例:

未引入前:

body {
    width: 750px;
    height: 640px;
}

引入后:除以100并将px换成rem

body {
    width: 7.5rem;
    height: 6.4rem;
}

以上是关于70.JS---利用原生js做手机端网页自适应解决方案rem布局的主要内容,如果未能解决你的问题,请参考以下文章

手机端页面自适应解决方案

手机端页面自适应解决方案

手机端页面自适应解决方案—rem布局

手机端页面自适应解决方案—rem布局

手机端页面自适应解决方案—rem布局

VUE 判断电脑还是手机设备 pc端自适应 移动端rem布局