1var adaptive = {}; 2(function (win, lib) { 3 var doc = win.document; 4 var docEl = doc.documentElement; 5 // 设å¤åç´ æ¯ 6 var devicePixelRatio = win.devicePixelRatio; 7 // æä»¬è®¾ç½®çå¸å±è§å£ä¸çæ³è§å£çåç´ æ¯ 8 var dpr = 1; 9 // viewport缩æ¾å¼ 10 var scale = 1; 11 // 设置viewport 12 function setViewport() { 13 // 夿IOS 14 var isIPhone = /iphone/gi.test(win.navigator.appVersion); 15 if (lib.scaleType === 2 && isIPhone || lib.scaleType === 3) { 16 dpr = devicePixelRatio; 17 } 18 // window对象ä¸å¢å ä¸ä¸ªå±æ§ï¼æä¾å¯¹å¤çå¸å±è§å£ä¸çæ³è§å£çå¼ 19 win.devicePixelRatioValue = dpr; 20 // viewport缩æ¾å¼ï¼å¸å±è§å£ç¼©æ¾åå好æ¾ç¤ºæçæ³è§å£ç宽度ï¼é¡µé¢å°±ä¸ä¼è¿é¿æè¿çäº 21 scale = 1 / dpr; 22 // è·åå·²æçviewport 23 var hasMetaEl = doc.querySelector('meta[name="viewport"]'); 24 var metaStr = 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no'; 25 if (dpr === 1) { 26 metaStr = 'width=device-width, '.concat(metaStr); 27 } 28 if (!isIPhone && dpr !== 1) { 29 metaStr = metaStr.concat(', target-densitydpi=device-dpi'); 30 } 31 // 妿æï¼æ¹åä¹ 32 if (hasMetaEl) { 33 hasMetaEl.setAttribute('content', metaStr); 34 } 35 // å¦ææ²¡æï¼æ·»å ä¹ 36 else { 37 var metaEl = doc.createElement('meta'); 38 metaEl.setAttribute('name', 'viewport'); 39 metaEl.setAttribute('content', metaStr); 40 41 if (docEl.firstElementChild) { 42 docEl.firstElementChild.appendChild(metaEl); 43 } 44 else { 45 var containDiv = doc.createElement('div'); 46 containDiv.appendChild(metaEl); 47 docEl.appendChild(containDiv); 48 } 49 } 50 } 51 52 var newBase = 100; 53 lib.errDpr = 1; 54 55 function setRem() { 56 // å¸å±è§å£ 57 // var layoutView = docEl.clientWidth; ä¹å¯ä»¥ è·åå¸å±è§å£ç宽度 58 var _clientWidth = docEl.clientWidth; 59 var layoutView; 60 if (lib.maxWidth && _clientWidth>lib.maxWidth) { 61 layoutView = Math.min(docEl.getBoundingClientRect().width, lib.maxWidth * dpr); 62 }else if (lib.minWidth && _clientWidth<lib.minWidth) { 63 layoutView = Math.max(docEl.getBoundingClientRect().width, lib.minWidth * dpr); 64 } 65 else { 66 layoutView = docEl.getBoundingClientRect().width; 67 } 68 // 为äºè®¡ç®æ¹ä¾¿ï¼æä»¬è§å® 1rem === 100px设计å¾åç´ ï¼æä»¬åå¾çæ¶åå°±è½å¿«éè½¬æ¢ 69 // æäººé®ï¼ä¸ºä»ä¹ä¸è®©1rem === 1px设计åç´ å¢ï¼ 70 // 设计å¾ä¸è¬æ¯640æè 750px 71 // å¸å±è§å£ä¸è¬æ¯320å°1440 72 // 计ç®ä¸ä¸ªå¼ï¼ä½¿layoutçæ»å®½åº¦ä¸º (desinWidth/100) rem 73 // é£ä¹æè®¡ç®å ¬å¼ï¼layoutView / newBase = desinWidth / 100 74 // newBase = 100 * layoutView / desinWidth 75 // newBase = ä»äº50å°200ä¹é´ 76 // 妿 1rem === 1px 设计åç´ ï¼newBaseå°±ä»äº0.5å°2ä¹é´ï¼ç±äºå¾å¤æµè§å¨ææå°12pxéå¶ï¼è¿ä¸ªæ¶åå°±ä¸è½èªéåºäº 77 newBase = 100 * layoutView / lib.desinWidth * (lib.errDpr || 1); 78 docEl.style.fontSize = newBase + 'px'; 79 // remåºå弿¹ååï¼æå¨reflowä¸ä¸ï¼é¿å æè½¬ææºå页é¢èªéåºé®é¢ 80 doc.body&&(doc.body.style.fontSize = lib.baseFont / 100 + 'rem'); 81 // éæ°è®¾ç½®remåçåè°æ¹æ³ 82 lib.setRemCallback&&lib.setRemCallback(); 83 lib.newBase = newBase; 84 } 85 var tid; 86 lib.desinWidth = 750; 87 lib.baseFont = 28; 88 // å±é¨å·æ°çæ¶åé¨åchromeçæ¬åä½è¿å¤§çé®é¢ 89 lib.reflow = function() { 90 docEl.clientWidth; 91 }; 92 // æ£æ¥å®åä¸rem弿¯å¦æ¾ç¤ºæ£ç¡® 93 function checkRem() { 94 if (/android/ig.test(win.navigator.appVersion)) { 95 var hideDiv = document.createElement('p'); 96 hideDiv.style.height = '1px'; 97 hideDiv.style.width = '2.5rem'; 98 hideDiv.style.visibility = 'hidden'; 99 document.body.appendChild(hideDiv); 100 var now = hideDiv.offsetWidth; 101 var right = lib.newBase * 2.5; 102 if (Math.abs(right / now - 1) > 0.05) { 103 lib.errDpr = right / now; 104 setRem(); 105 } 106 document.body.removeChild(hideDiv); 107 } 108 } 109 lib.init = function () { 110 // resizeçæ¶åéæ°è®¾ç½®remåºåå¼ 111 // 触åorientationchange äºä»¶æ¶ä¹ä¼è§¦åresizeï¼æ ä¸éè¦åæ·»å æ¤äºä»¶äº 112 win.addEventListener('resize', function () { 113 clearTimeout(tid); 114 tid = setTimeout(setRem, 300); 115 }, false); 116 // æµè§å¨ç¼åä¸è¯»åæ¶ä¹éè¦éæ°è®¾ç½®remåºåå¼ 117 win.addEventListener('pageshow', function (e) { 118 if (e.persisted) { 119 clearTimeout(tid); 120 tid = setTimeout(setRem, 300); 121 } 122 }, false); 123 // 设置bodyä¸çåä½å¤§å° 124 if (doc.readyState === 'complete') { 125 doc.body.style.fontSize = lib.baseFont / 100 + 'rem'; 126 checkRem(); 127 } 128 else { 129 doc.addEventListener('DOMContentLoaded', function (e) { 130 doc.body.style.fontSize = lib.baseFont / 100 + 'rem'; 131 checkRem(); 132 }, false); 133 }
134 setViewport(); 135 // 设置remå¼ 136 setRem(); 137 // htmlèç¹è®¾ç½®å¸å±è§å£ä¸çæ³è§å£çåç´ æ¯ 138 docEl.setAttribute('data-dpr', dpr); 139 }; 140 // æäºhtmlå ç´ åªè½ä»¥px为åä½ï¼æä»¥éè¦æä¾ä¸ä¸ªæ¥å£ï¼æremå使¢ç®æpx 141 lib.remToPx = function (remValue) { 142 return remValue * newBase; 143 }; 144})(window, adaptive); 145if (typeof module != 'undefined' && module.exports) { 146 module.exports = adaptive; 147} else if (typeof define == 'function' && define.amd) { 148 define(function() { 149 return adaptive; 150 }); 151} else { 152 window.adaptive = adaptive; 153}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.