利用原生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;
}
原文地址:https://www.cnblogs.com/sqyambition/p/10805218.html
时间: 2024-10-22 14:43:30