国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS動(dòng)態(tài)計(jì)算移動(dòng)端rem的解決方案

2019-11-20 08:45:01
字體:
供稿:網(wǎng)友

在做移動(dòng)端web app的時(shí)候,眾所周知,移動(dòng)設(shè)備分辨率五花八門,雖然我們可以通過CSS3的media query來實(shí)現(xiàn)適配,例如下面這樣:

html {font-size : 20px;}@media only screen and (min-width: 401px){html {font-size: 25px !important;}}@media only screen and (min-width: 428px){html {font-size: 26.75px !important;}}@media only screen and (min-width: 481px){html {font-size: 30px !important; }}@media only screen and (min-width: 569px){html {font-size: 35px !important; }}@media only screen and (min-width: 641px){html {font-size: 40px !important; }}

但是這種做法并不能適配所有設(shè)備,于是就有了實(shí)現(xiàn)全適配的JS解決方案,例如下面這樣:

;(function (doc, win, undefined) {var docEl = doc.documentElement,resizeEvt = 'orientationchange' in win? 'orientationchange' : 'resize',recalc = function () {var clientWidth = docEl.clientWidth;if (clientWidth === undefined) return;docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';};if (doc.addEventListener === undefined) return;win.addEventListener(resizeEvt, recalc, false);doc.addEventListener('DOMContentLoaded', recalc, false)})(document, window);

另外附上淘寶移動(dòng)端適配解決方案flexible.js源碼:

;(function(win, lib) {var doc = win.document;var docEl = doc.documentElement;var metaEl = doc.querySelector('meta[name="viewport"]');var flexibleEl = doc.querySelector('meta[name="flexible"]');var dpr = 0;var scale = 0;var tid;var flexible = lib.flexible || (lib.flexible = {});if (metaEl) {//將根據(jù)已有的meta標(biāo)簽來設(shè)置縮放比例var match = metaEl.getAttribute('content').match(/initial/-scale=([/d/.]+)/);if (match) {scale = parseFloat(match[1]);dpr = parseInt(1 / scale);}} else if (flexibleEl) {var content = flexibleEl.getAttribute('content');if (content) {var initialDpr = content.match(/initial/-dpr=([/d/.]+)/);var maximumDpr = content.match(/maximum/-dpr=([/d/.]+)/);if (initialDpr) {dpr = parseFloat(initialDpr[1]);scale = parseFloat((1 / dpr).toFixed(2)); }if (maximumDpr) {dpr = parseFloat(maximumDpr[1]);scale = parseFloat((1 / dpr).toFixed(2)); }}}if (!dpr && !scale) {var isAndroid = win.navigator.appVersion.match(/android/gi);var isIPhone = win.navigator.appVersion.match(/iphone/gi);var devicePixelRatio = win.devicePixelRatio;if (isIPhone) {// iOS下,對(duì)于2和3的屏,用2倍的方案,其余的用1倍方案if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { dpr = 3;} else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){dpr = 2;} else {dpr = 1;}} else {// 其他設(shè)備下,仍舊使用1倍的方案dpr = 1;}scale = 1 / dpr;}docEl.setAttribute('data-dpr', dpr);if (!metaEl) {metaEl = doc.createElement('meta');metaEl.setAttribute('name', 'viewport');metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');if (docEl.firstElementChild) {docEl.firstElementChild.appendChild(metaEl);} else {var wrap = doc.createElement('div');wrap.appendChild(metaEl);doc.write(wrap.innerHTML);}}function refreshRem(){var width = docEl.getBoundingClientRect().width;if (width / dpr > 540) {width = 540 * dpr;}var rem = width / 10;docEl.style.fontSize = rem + 'px';flexible.rem = win.rem = rem;}win.addEventListener('resize', function() {clearTimeout(tid);tid = setTimeout(refreshRem, 300);}, false);win.addEventListener('pageshow', function(e) {if (e.persisted) {clearTimeout(tid);tid = setTimeout(refreshRem, 300);}}, false);if (doc.readyState === 'complete') {doc.body.style.fontSize = 12 * dpr + 'px';} else {doc.addEventListener('DOMContentLoaded', function(e) {doc.body.style.fontSize = 12 * dpr + 'px';}, false);}refreshRem();flexible.dpr = win.dpr = dpr;flexible.refreshRem = refreshRem;flexible.rem2px = function(d) {var val = parseFloat(d) * this.rem;if (typeof d === 'string' && d.match(/rem$/)) {val += 'px';}return val;}flexible.px2rem = function(d) {var val = parseFloat(d) / this.rem;if (typeof d === 'string' && d.match(/px$/)) {val += 'rem';}return val;}})(window, window['lib'] || (window['lib'] = {}));

以上所述是小編給大家介紹的JS動(dòng)態(tài)計(jì)算移動(dòng)端rem的解決方案,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 株洲县| 鹿泉市| 昂仁县| 岳西县| 广宗县| 兴宁市| 自贡市| 随州市| 汉中市| 湖南省| 潍坊市| 漳州市| 吉安县| 南陵县| 东乌珠穆沁旗| 和田市| 六枝特区| 盐边县| 潞城市| 江都市| 贺兰县| 华安县| 海盐县| 绥阳县| 犍为县| 新密市| 平武县| 灌云县| 阳新县| 临沭县| 平阳县| 玉树县| 林芝县| 西平县| 昭平县| 和政县| 双牌县| 武穴市| 昆山市| 和林格尔县| 白玉县|