Cssh5面试

JS动态设置rem

2021-12-28  本文已影响0人  硅谷干货
image.png

移动端中的使用

新建index.js文件,全局引入

(function(doc, win) {
    var docEl = doc.documentElement,
        resizeEvt = "orientationchange" in window ? "orientationchange" : "resize",
        recalc = function() {
            if (docEl.clientWidth > 750) {
                docEl.style.fontSize = "100px";
                doc.getElementById("app").style.width = "750px";
            } else {
                var width = docEl.clientWidth / 7.5;
                docEl.style.fontSize = width + "px";
                doc.getElementById("app").style.width = "auto";
            }
        };
    if (!doc.addEventListener) return;
    win.addEventListener(resizeEvt, recalc, false);
    doc.addEventListener("DOMContentLoaded", recalc, false);
})(document, window);

这样在任何设备和浏览器上看到了就是移动端的布局样式了,如果你的产品形态是移动端、PC端通配,代码就不能这么写了。

移动端和PC端通配

同样新建index.js文件,全局引入

//适配兼容
(function (doc, win) {
    console.log(doc, win)
    // var docEle = doc.documentElement;
    const dpr = Math.min(win.devicePixelRatio, 3),
        scale = 1 / dpr,
        resizeEvent = 'orientationchange' in window ? 'orientationchange' : 'resize';

    var recalCulate = function () {
        var docEle = document.documentElement,
            w = docEle.clientWidth,
            num = (w > 750 ? 750 : w) / 750;       // **此时的750就是你设计稿的尺寸
        docEle.style.fontSize = (num * 100).toFixed(1) + 'px';
    };
    recalCulate();
    if (!doc.addEventListener) return;
    win.addEventListener(resizeEvent, recalCulate, false);
})(document, window);

参考链接:
JavaScript 中 rem 的实现和计算 - 掘金 (juejin.cn)
通过js动态设置根元素的rem方案 - SegmentFault 思否

点赞加关注,永远不迷路

上一篇 下一篇

猜你喜欢

热点阅读