auto responsive rem

移动端适配


;(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) {
// console.warn('将根据已有的meta标签来设置缩放比例');
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下,对于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 {
// 其他设备下,仍旧使用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'] = {}));

http://arkdesign.cn/vendor/flexible.js


xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


最新文章

  1. WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路
  2. Microsoft Visual Stduio 2005 Ent安装报错解决方法
  3. Hierarchyid 常用操作
  4. Post model至Web Api创建或是保存数据
  5. 5. Configure the Image Service
  6. 3D 生物打印血管成功植入恒河猴体内
  7. UI进阶 数据处理之文件读写
  8. MyBatis Oracle批量更新
  9. C# 之【获取网页响应码200】
  10. mac环境,搭建python+selenium遇到的问题
  11. rem与@media 的优缺点
  12. freemarker中的substring取子串
  13. SpringBoot操作数据库 2017.12.14
  14. 点击 Button触发事件将GridView1 CheckBox勾选的行添加到GridView2中
  15. mybatis循环、mybatis传map
  16. Chapter 4 Invitations——6
  17. iTOP4412环境搭建:arm-linux-gcc: 没有那个文件或目录
  18. 微信&支付宝 支付单文件操作
  19. Django CSRF提交遇见的问题
  20. Spring框架的配置文件分开管理(了解)

热门文章

  1. autoreload 线程 进程管理 并发的处理方法
  2. tarjan 复习笔记 割点与桥
  3. Linux内核poll/select机制简析
  4. 八:SpringBoot-集成JPA持久层框架,简化数据库操作
  5. MySQL、SqlServer、Oracle 三种数据库的优缺点
  6. Spring boot获取getBean
  7. 第2层交换和生成树协议(STP)__第2层的3种交换功能
  8. Jenkins(8)构建触发器之定时构建和轮询 SCM
  9. Pytest(9)skip跳过用例
  10. 使用Python调用SMTP服务自动发送Email