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

方法二:
!function(win, option) {
  var count = 0, 
      designWidth = option.designWidth, 
      designHeight = option.designHeight || 0, 
      designFontSize = option.designFontSize || 20, 
      callback = option.callback || null,
      root = document.documentElement,
      body = document.body,
      rootWidth, newSize, t, self;
      root.style.width = 100%;
  //返回root元素字体计算结果
  function _getNewFontSize() {
    var scale = designHeight !== 0 ? Math.min(win.innerWidth / designWidth, win.innerHeight / designHeight) : win.innerWidth / designWidth;
    return parseInt( scale * 10000 * designFontSize ) / 10000;
  }
  !function () {
    rootWidth = root.getBoundingClientRect().width;
    self = self ? self : arguments.callee;
    //如果此时屏幕宽度不准确,就尝试再次获取分辨率,只尝试20次,否则使用win.innerWidth计算
    if( rootWidth !== win.innerWidth &&  count < 20 ) {
      win.setTimeout(function () {
        count++;
        self();
      }, 0);
    } else {
      newSize = _getNewFontSize();
      //如果css已经兼容当前分辨率就不管了
      if( newSize + 'px' !== getComputedStyle(root)['font-size'] ) {
        root.style.fontSize = newSize + "px";
        return callback && callback(newSize);
      };
    };
  }();
  //横竖屏切换的时候改变fontSize,根据需要选择使用
  win.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", function() {
    clearTimeout(t);
    t = setTimeout(function () {
      self();
    }, 300);
  }, false);
}(window, {
  designWidth: 640, 
  designHeight: 1136,
  designFontSize: 20,
  callback: function (argument) {
    console.timeEnd("test")
  }
});

方法三:
var dpr, rem, scale; 
var docEl = document.documentElement; 
var fontEl = document.createElement('style'); 
var metaEl = document.querySelector('meta[name="viewport"]'); 
scale = 1 / dpr; 
dpr = win.devicePixelRatio || 1; 
rem = docEl.clientWidth * dpr / 10; 
// 设置viewport,进行缩放,达到高清效果 
metaEl.setAttribute('content', 'width=' + dpr * docEl.clientWidth + ', 
                     initial-scale=' + scale + ',maximum-scale=' + scale + ', 
                     minimum-scale=' + scale + ',user-scalable=no'); 
// 设置data-dpr属性,留作的css hack之用 
docEl.setAttribute('data-dpr', dpr); 
// 动态写入样式 
docEl.firstElementChild.appendChild(fontEl); 
fontEl.innerHTML = 'html{font-size:' + rem + 'px!important;}'; 
// 给js调用的,某一dpr下rem和px之间的转换函数 
window.rem2px = function(v) { 
    v = parseFloat(v); 
    return v * rem; 
}; 
window.px2rem: function(v) { 
    v = parseFloat(v); 
    return v / rem; 
}; 
window.dpr = dpr; 
window.rem = rem;

最新文章

  1. Entity Framework 6 Recipes 2nd Edition(12-3)译 -&gt; 数据库连接日志
  2. SQL Server 监控系列(文章索引)
  3. java多线程系类:JUC原子类:04之AtomicReference原子类
  4. 【前端】移动端Web开发学习笔记【1】
  5. DELL PowerEdge 2950更换告警硬盘
  6. string.Join()的用法
  7. Pearson(皮尔逊)相关系数及MATLAB实现
  8. LAMP-五分钟搭建个人论坛
  9. Android环境搭建中遇到的小问题
  10. 使用NBU进行oracle异机恢复
  11. js 解决原型问题的方案 : 构造器和原型的组合
  12. Linux进程间通信IPC学习笔记之有名管道
  13. java反射温习一下
  14. jquery 操作 checkbox
  15. 如何利用Oracle VM Templates 在几分钟内部署Oracle Real Application Clusters (RAC)
  16. HTML XML 介绍
  17. [转帖]Gartner预测2019年全球IT支出将达到3.8万亿美元
  18. 高性能IO之Reactor模式(转载)
  19. form表单钩子,局部钩子和全局钩子
  20. 【UNIX环境编程、操作系统】孤儿进程和僵尸进程

热门文章

  1. 【extjs6学习笔记】0.1 准备:基础概念(02)
  2. js当前日期
  3. UVA 12325 Zombie&#39;sTreasureChest 宝箱 (分类枚举)
  4. thisnkphp添加二维码
  5. vue validate多表单验证思考 之前写过一个里外层,现在觉得不合适,应该平行的写,然后都给ret,最后判断ret 再做出反应,这样整体表单的所有验证就都报验证,然后最后提交的时候把组件内的对象合并到总的对象,再提交
  6. Java写诗程序
  7. ps基础实例
  8. bower使用
  9. 正确适配苹果ATS审核要求的姿势
  10. vue + axios---封装一个http请求