移动端使用js控制rem大小

如图,本人在写移动端页面时用js控制rem大小。现在出现的问题是,app页面打开的一瞬间会有一秒钟的闪动,就是页面刚加载出来时候页面的内容会很大,一秒之后又恢复正常,尝试了很多办法还是没有解决。希望有大神能帮我指导
clipboard.png

阅读 5.8k
5 个回答

两步:

  1. 代码放进 <head>

  2. 不要等待 DOMContentLoaded 事件, 直接执行

如下代码:

!function() {
    var html = document.documentElement;
    var setFontSize = function() {
        var width = html.offsetWidth;
        if(width <= 640) {
            html.style.fontSize = width / 6.4+ 'px';
        } else {
            html.style.fontSize = 100 + 'px';
        }
    };
    var timer;
    var setDelay = function() {
        return clearTimeout(timer), (timer = setTimeout(setFontSize, 150));
    }
    window.addEventListener('pageshow', function(evt) {
        return evt.persisted && setDelay();
    });
    window.addEventListener('resize', setDelay);
    setFontSize();
}();

除了在head中执行JS脚本:
$("html").css("font-size", 0.04 * $(window).width());

还可以直接用vw(viewport width)这个单位:

html {
    font-size: 4vw;
}

假设宽为360px,则4vw等于4%*360=14.4px,也就是html根字体大小为14.4px,其他长度单位是这个大小的倍数,1rem就是1倍,2rem就是2倍.

还不如用css媒体查询解决,还有不要放在domready事件里,直接执行。话说二楼刚开年就熬夜加班真可怜

    (function (doc, win) {
        var docEl = doc.documentElement,
        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
        recalc = function () {
            var clientWidth = docEl.clientWidth;
            if (clientWidth > 640){
                docEl.style.fontSize = 100 + 'px';
            }else {
                docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';
            }

        };
        if (!doc.addEventListener) return;
        win.addEventListener(resizeEvt, recalc, false);
        doc.addEventListener('DOMContentLoaded', recalc, false);
    })(document, window);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题