成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

說(shuō)說(shuō)vue-cli中使用flexible和px2rem-loader

Heier / 3433人閱讀

摘要:下載或在項(xiàng)目中引入一般情況在中引入設(shè)置標(biāo)簽視情況而定安裝或在中配置,在項(xiàng)目文件中找到,將添加到中,,下的根據(jù)設(shè)計(jì)稿而定具體如下編譯新加由于設(shè)計(jì)稿是添加到里面省略項(xiàng)目中使用假設(shè)設(shè)計(jì)稿和分別是,具體代碼

1.下載lib-flexible

npm i lib-flexible --save
或
yarn add lib-flexible

2.在項(xiàng)目中引入lib-flexible 一般情況在(main.js中引入lib-flexible)

import "lib-flexible/flexible"

3.設(shè)置meta標(biāo)簽(視情況而定)


4.安裝px2rem-loader

npm install px2rem-loader   --save
或
yarn add px2rem-loader

5.在webpack中配置px2rem-loader

1,在項(xiàng)目build文件中找到util.js,將px2rem-loader添加到cssLoaders中,
2,px2rem-loader 下的 remUnit 根據(jù)設(shè)計(jì)稿而定
具體如下:

exports.cssLoaders = function (options) {
  options = options || {}

  const cssLoader = {
    loader: "css-loader",
    options: {
      minimize: process.env.NODE_ENV === "production",
      sourceMap: options.sourceMap
    }
  }
  //rem編譯(新加px2)
  const px2remLoader = {
    loader: "px2rem-loader",
    options: {
      remUnit: 75 // 由于設(shè)計(jì)稿是750
    }
  }

  function generateLoaders (loader, loaderOptions) {
    var loaders = [cssLoader,px2remLoader]//添加到loader里面
    省略.....
  }
}

6.項(xiàng)目中使用

假設(shè)設(shè)計(jì)稿width和font-size分別是200px,50px
具體代碼:(按照設(shè)計(jì)稿寫即可)

.demo{
    width: 200px;
    font-size: 50px;
}

7.多帶帶使用flexible可直接添加一個(gè)rem.js文件,具體如下:

1,配合less,sass和stylus來(lái)做px轉(zhuǎn)換rem
2,具體可參看css編譯

/*
** 移動(dòng)端自適應(yīng)方案  FROM 手淘
*/
export const setViewport = (()=>{//此處是多帶帶使用
    const win = window
    const lib = window.lib || (window.lib = {})
//;(function(win, lib) {//此處是直接使用
    let doc = win.document;
    let docEl = doc.documentElement;
    let metaEl = doc.querySelector("meta[name="viewport"]");
    let flexibleEl = doc.querySelector("meta[name="flexible"]");
    let dpr = 0;
    let scale = 0;
    let tid;
    let flexible = lib.flexible || (lib.flexible = {});
    
    if (metaEl) {
        //console.warn("將根據(jù)已有的meta標(biāo)簽來(lái)設(shè)置縮放比例");
        let match = metaEl.getAttribute("content").match(/initial-scale=([d.]+)/);
        if (match) {
            scale = parseFloat(match[1]);
            dpr = parseInt(1 / scale);
        }
    } else if (flexibleEl) {
        let content = flexibleEl.getAttribute("content");
        if (content) {
            let initialDpr = content.match(/initial-dpr=([d.]+)/);
            let 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) {
        //let isAndroid = win.navigator.appVersion.match(/android/gi);
        let isIPhone = win.navigator.appVersion.match(/iphone/gi);
        let devicePixelRatio = win.devicePixelRatio;
        if (isIPhone) {
            // iOS下,對(duì)于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 {
            // 其他設(shè)備下,仍舊使用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 {
            let wrap = doc.createElement("div");
            wrap.appendChild(metaEl);
            doc.write(wrap.innerHTML);
        }
    }

    function refreshRem(){
        let width = docEl.getBoundingClientRect().width;
        if (width / dpr > 540) {
            width = 540 * dpr;
        }
        let 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() {
            doc.body.style.fontSize = 12 * dpr + "px";
        }, false);
    }

    refreshRem();

    flexible.dpr = win.dpr = dpr;
    flexible.refreshRem = refreshRem;
    flexible.rem2px = function(d) {
        let val = parseFloat(d) * this.rem;
        if (typeof d === "string" && d.match(/rem$/)) {
            val += "px";
        }
        return val;
    };
    flexible.px2rem = function(d) {
        let val = parseFloat(d) / this.rem;
        if (typeof d === "string" && d.match(/px$/)) {
            val += "rem";
        }
        return val;
    };

});
//})(window, window.lib || (window.lib = {}));

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/102167.html

相關(guān)文章

  • webpack手動(dòng)構(gòu)建vuevue-cli構(gòu)建使用 px2rem-loader ,全局自動(dòng)轉(zhuǎn)換px

    摘要:做移動(dòng)端時(shí),適配是必須的。使用單位,可在不同屏幕上完美顯示相同的布局。文件首先要把轉(zhuǎn)成正常的,在交給來(lái)做,所以是外還需要加上一個(gè)設(shè)計(jì)稿寬度表示轉(zhuǎn)換過程小數(shù)保留幾位。安裝配置結(jié)束后,重啟項(xiàng)目。會(huì)發(fā)現(xiàn)自己設(shè)置的被轉(zhuǎn)為了。 做移動(dòng)端時(shí),適配 是必須的。使用rem單位,可在不同屏幕上完美顯示相同的布局。px2rem 插件方便的將px單位轉(zhuǎn)為了rem。 1. 自己手動(dòng)構(gòu)建vue webpck配置...

    AWang 評(píng)論0 收藏0
  • vue-cli 配置flexible

    摘要:一般需用這個(gè)在后面添加會(huì)根據(jù)的不同,生成三套代碼。如果明白了這些方法,就沒必要再配置的了,因?yàn)橄旅娴姆椒ǜ菀卓刂仆獠恳氲氖欠裥枰D(zhuǎn),而更改就控制不了了,它會(huì)強(qiáng)制轉(zhuǎn)換。能正常轉(zhuǎn)換不能正常轉(zhuǎn)換不能正常轉(zhuǎn)換 基于vue-cli配置手淘的lib-flexible + rem,實(shí)現(xiàn)移動(dòng)端自適應(yīng) 沒接觸過flexible的建議先看看大漠的這篇文章這樣你才會(huì)知道長(zhǎng)度為什么用rem,而字體要用px...

    caoym 評(píng)論0 收藏0
  • vuevue-cli構(gòu)建使用 px2rem-loader ,全局自動(dòng)轉(zhuǎn)換px單位,完美解決引入第三

    摘要:使用的小伙伴兒會(huì)用到淘寶的開源的適配方案去輕松的完成適配,這也是我最喜歡的,但是使用這個(gè)方案時(shí),你引入第三方庫(kù)時(shí)樣式會(huì)變小。。這個(gè)坑難的我不行,各種百度,各種想法,差一點(diǎn)就放棄了這個(gè)方案。 最近公司的的項(xiàng)目趕,作為前端的小白懶出新的高度,使出專業(yè)的技能 --復(fù)制粘貼!?。ǜ膭e人的代碼也是煎熬)我經(jīng)常做一些H5頁(yè)面,這樣就會(huì)遇到適配這個(gè)頭疼的問題,我分享下我用經(jīng)常用到的適配方案: 這里...

    CodeSheep 評(píng)論0 收藏0
  • vuevue-cli構(gòu)建使用 px2rem-loader ,全局自動(dòng)轉(zhuǎn)換px單位,完美解決引入第三

    摘要:使用的小伙伴兒會(huì)用到淘寶的開源的適配方案去輕松的完成適配,這也是我最喜歡的,但是使用這個(gè)方案時(shí),你引入第三方庫(kù)時(shí)樣式會(huì)變小。。這個(gè)坑難的我不行,各種百度,各種想法,差一點(diǎn)就放棄了這個(gè)方案。 最近公司的的項(xiàng)目趕,作為前端的小白懶出新的高度,使出專業(yè)的技能 --復(fù)制粘貼?。。ǜ膭e人的代碼也是煎熬)我經(jīng)常做一些H5頁(yè)面,這樣就會(huì)遇到適配這個(gè)頭疼的問題,我分享下我用經(jīng)常用到的適配方案: 這里...

    monw3c 評(píng)論0 收藏0
  • vuevue-cli構(gòu)建使用 px2rem-loader ,全局自動(dòng)轉(zhuǎn)換px單位,完美解決引入第三

    摘要:使用的小伙伴兒會(huì)用到淘寶的開源的適配方案去輕松的完成適配,這也是我最喜歡的,但是使用這個(gè)方案時(shí),你引入第三方庫(kù)時(shí)樣式會(huì)變小。。這個(gè)坑難的我不行,各種百度,各種想法,差一點(diǎn)就放棄了這個(gè)方案。 最近公司的的項(xiàng)目趕,作為前端的小白懶出新的高度,使出專業(yè)的技能 --復(fù)制粘貼?。。ǜ膭e人的代碼也是煎熬)我經(jīng)常做一些H5頁(yè)面,這樣就會(huì)遇到適配這個(gè)頭疼的問題,我分享下我用經(jīng)常用到的適配方案: 這里...

    loostudy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<