zoukankan      html  css  js  c++  java
  • 70.JS---利用原生js做手机端网页自适应解决方案rem布局

                   利用原生js做手机端网页自适应解决方案rem布局

    刚开始我用的是下面这段代码,然后js通过外部链接引入,最后每次用手机刷新网页的时候都会出现缩略图

    function getRem(pwidth, prem) {
    var html = document.getElementsByTagName("html")[0];
    var oWidth = document.body.clientWidth || document.documentElement.clientWidth;
    html.style.fontSize = oWidth / pwidth * prem + "px";
    }

    $(document).ready(function () {
    getRem(750, 100);
    });



    然后我试着写在html页面,也会出现短暂的缩略图,作为一个处女座的我来说,是绝对不允许的。
    所以我在网上找了很多代码,发现他们有的只能在电脑上F12测试,并不能用手机上面的浏览器进行测试,还有其他一些也不能兼容。
    最后我找到了网易的rem自适应代码

    (function(doc, win) {
        var docEl = doc.documentElement,
    isIOS = navigator.userAgent.match(/(i[^;]+;( U;)? CPU.+Mac OS X/),
    dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,
    dpr = window.top === window.self ? dpr : 1, //被iframe引用时,禁止缩放
    dpr = 1,
    scale = 1 / dpr,
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
    docEl.dataset.dpr = dpr;
    var metaEl = doc.createElement('meta');
    metaEl.name = 'viewport';
    metaEl.content = 'initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale;
    docEl.firstElementChild.appendChild(metaEl);
    var recalc = function() {
    var width = docEl.clientWidth;
    if (width / dpr > 750) {
    width = 750 * dpr;
    }
    // 乘以100,px : rem = 100 : 1
    docEl.style.fontSize = 100 * (width / 750) + 'px';
    };
    recalc()
    if (!doc.addEventListener) return;
    win.addEventListener(resizeEvt, recalc, false);
    })(document, window);

    经过测试,在电脑上和手机上的测试,都兼容所有分辨率的手机,并且还能随着屏幕宽度进行实时变化。
    这样就不用考虑 $(window).resize(function () {})

    唯一的不便就是不能通过外部链接的形式引入js,只能写在每个页面的head里面,用内联的方式写进html页面。
    当然在实际项目里面,可以直接写在公共文件public.html里面

    上面的比例是750:100,按照设计图上面,所有大小都要除以100.
    例:

    未引入前:

    body {
         750px;
        height: 640px;
    }

    引入后:除以100并将px换成rem

    body {
         7.5rem;
        height: 6.4rem;
    }
  • 相关阅读:
    redis 持久化
    Hyper-V虚拟机Redhat添加网卡找不到网卡配置文件解决方法
    java 查看ssl log
    iptables配置https防火墙策略
    java 一致性哈希源码 转
    mysql主备配置方法
    hibernate 缓存配置
    Hibernate中文乱码
    HttpPost 中文编码问题 EntityBuilder
    apache 配置tomcat代理
  • 原文地址:https://www.cnblogs.com/sqyambition/p/10805218.html
Copyright © 2011-2022 走看看