网站项目有需要什么技术支持,兰州网站建设平台分析,廊坊做网站的企业哪家好,西安 网站空间点击跳转官方Git地址 此博客参考笔记
也可以直接复制下方的js文件直接使用
index.js
var adaptive {};
(function (win, lib) {var doc win.document;var docEl doc.documentElement;// 设备像素比var devicePixelRatio win.devicePixelRatio;// 我们设置的布局视口与理…点击跳转官方Git地址 此博客参考笔记
也可以直接复制下方的js文件直接使用
index.js
var adaptive {};
(function (win, lib) {var doc win.document;var docEl doc.documentElement;// 设备像素比var devicePixelRatio win.devicePixelRatio;// 我们设置的布局视口与理想视口的像素比var dpr 1; // viewport缩放值var scale 1; // 设置viewportfunction setViewport() {// 判断IOSvar isIPhone /iphone/gi.test(win.navigator.appVersion);if (lib.scaleType 2 isIPhone || lib.scaleType 3) {dpr devicePixelRatio;}// window对象上增加一个属性提供对外的布局视口与理想视口的值win.devicePixelRatioValue dpr;// viewport缩放值布局视口缩放后刚好显示成理想视口的宽度页面就不会过长或过短了scale 1 / dpr;// 获取已有的viewportvar hasMetaEl doc.querySelector(meta[nameviewport]);var metaStr initial-scale scale , maximum-scale scale , minimum-scale scale , user-scalableno;if (dpr 1) {metaStr widthdevice-width, .concat(metaStr);}if (!isIPhone dpr ! 1) {metaStr metaStr.concat(, target-densitydpidevice-dpi);}// 如果有改变之if (hasMetaEl) {hasMetaEl.setAttribute(content, metaStr);}// 如果没有添加之else {var metaEl doc.createElement(meta);metaEl.setAttribute(name, viewport);metaEl.setAttribute(content, metaStr);if (docEl.firstElementChild) {docEl.firstElementChild.appendChild(metaEl);}else {var containDiv doc.createElement(div);containDiv.appendChild(metaEl);docEl.appendChild(containDiv);}}}var newBase 100;lib.errDpr 1;function setRem() {// 布局视口// var layoutView docEl.clientWidth; 也可以 获取布局视口的宽度var layoutView;if (lib.maxWidth) {layoutView Math.min(docEl.getBoundingClientRect().width, lib.maxWidth * dpr);}else {layoutView docEl.getBoundingClientRect().width;}// 为了计算方便我们规定 1rem 100px设计图像素我们切图的时候就能快速转换// 有人问为什么不让1rem 1px设计像素呢// 设计图一般是640或者750px// 布局视口一般是320到1440// 计算一个值使layout的总宽度为 (desinWidth/100) rem// 那么有计算公式layoutView / newBase desinWidth / 100// newBase 100 * layoutView / desinWidth// newBase 介于50到200之间// 如果 1rem 1px 设计像素newBase就介于0.5到2之间由于很多浏览器有最小12px限制这个时候就不能自适应了newBase 100 * layoutView / lib.desinWidth * (lib.errDpr || 1);docEl.style.fontSize newBase px;// rem基准值改变后手动reflow一下避免旋转手机后页面自适应问题doc.body(doc.body.style.fontSize lib.baseFont / 100 rem);// 重新设置rem后的回调方法lib.setRemCallbacklib.setRemCallback();lib.newBase newBase;}var tid;lib.desinWidth 750;lib.baseFont 28;// 局部刷新的时候部分chrome版本字体过大的问题lib.reflow function() {docEl.clientWidth;};// 检查安卓下rem值是否显示正确function checkRem() {if (/android/ig.test(win.navigator.appVersion)) {var hideDiv document.createElement(p);hideDiv.style.height 1px;hideDiv.style.width 2.5rem;hideDiv.style.visibility hidden;document.body.appendChild(hideDiv);var now hideDiv.offsetWidth;var right lib.newBase * 2.5; if (Math.abs(right / now - 1) 0.05) {lib.errDpr right / now;setRem();}document.body.removeChild(hideDiv);}}lib.init function () {// resize的时候重新设置rem基准值// 触发orientationchange 事件时也会触发resize故不需要再添加此事件了win.addEventListener(resize, function () {clearTimeout(tid);tid setTimeout(setRem, 300);}, false);// 浏览器缓存中读取时也需要重新设置rem基准值win.addEventListener(pageshow, function (e) {if (e.persisted) {clearTimeout(tid);tid setTimeout(setRem, 300);}}, false);// 设置body上的字体大小if (doc.readyState complete) {doc.body.style.fontSize lib.baseFont / 100 rem;checkRem();}else {doc.addEventListener(DOMContentLoaded, function (e) {doc.body.style.fontSize lib.baseFont / 100 rem;checkRem();}, false);}setViewport();// 设置rem值setRem();// html节点设置布局视口与理想视口的像素比docEl.setAttribute(data-dpr, dpr);};// 有些html元素只能以px为单位所以需要提供一个接口把rem单位换算成pxlib.remToPx function (remValue) {return remValue * newBase;};
})(window, adaptive);
if (typeof module ! undefined module.exports) {module.exports adaptive;
} else if (typeof define function define.amd) {define(function() {return adaptive;});
} else {window.adaptive adaptive;
}在index.html使用
!DOCTYPE html
html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleDocument/titlescript src./index.js/scriptscriptwindow[adaptive].desinWidth 750// 设计图宽度window[adaptive].baseFont 28// 没有缩放时的字体大小window[adaptive].maxWidth 750// 页面最大宽度 默认540window[adaptive].init()// 调用初始化方法/scriptstylediv {width: 0.3rem;height: 0.3rem;background-color: red;}/style
/headbodydiv123/div
/body/html