Mobile terminal adaptation (APP screen adaptation)

Create a new js file
Insert picture description here
in the directory and write in the file

;(function(win,lib){
    var doc=win.document;
    var docEl=doc.documentElement;
    var metaEl=doc.querySelector('meta[name="viewport"]');
    var flexibleEl=doc.querySelector('meta[name="flexible"');
    var dpr=0;
    var scale=0;
    var tid;
    var flexible = lib.flexible || (lib.flexible = {});
    if(metaEl){
        console.warn("将根据已有的meta标签来设置缩放比例");
        var match=metaEl.getAttribute("content").match(/initial\-scale=([\d\.]+)/);
        if(match){
            scale=parseFloat(match[1]);
            dpr=parseFloat(1/scale)
        }
    }else{
        if(flexibleEl){
            var content=flexibleEl.getAttribute("content");
            if(content){
                var initialDpr=content.match(/initial\-dpr=([\d\.]+)/);
                var 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){
        var isAndroid=win.navigator.appVersion.match(/android/gi);
        var isIPhone=win.navigator.appVersion.match(/iphone/gi);
        var devicePixelRatio=win.devicePixelRatio;
        if(isIPhone){
            if(devicePixelRatio>=3&&(!dpr||dpr>=3)){
                dpr=3;
            }else{
                if(devicePixelRatio>=2&&(!dpr||dpr>=2)) {
                    dpr = 2;
                }else{
                    dpr=1;
                }
            }
        }else{
            dpr=1;
        }
        scale=1/dpr
    }
    docEl.setAttribute("data-dpr",dpr);
    if(!metaEl){
        metaEl=doc.createElement("meta");
        metaEl.setAttribute("name","viewport");
        if(!!win.webPageScalable){
            metaEl.setAttribute("content","initial-scale="+scale+",user-scalable=yes")
        }else{
            metaEl.setAttribute("content","initial-scale="+scale+",maximum-scale="+scale+",minimum-scale="+scale+",user-scalable=no viewport-fit=cover")
        }
        if(docEl.firstElementChild){
            docEl.firstElementChild.appendChild(metaEl)
        }else{
            var wrap=doc.createElement("div");
            wrap.appendChild(metaEl);
            doc.write(wrap.innerHTML)
        }
    }
    function refreshRem() {
        var width=docEl.getBoundingClientRect().width;
        var ua=navigator.userAgent.toLowerCase();
        if(!/ipad.*yanxuan/.test(ua)){
            if(width/dpr>750){
                width=750*dpr
            }
        }
        var 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 (e) {
                    doc.body.style.fontSize=12*dpr+"px"
                },
                false)
        }
        refreshRem();
        flexible.dpr=win.dpr=dpr;
        flexible.refreshRem=refreshRem();
        flexible.rem2px=function (d) {
            var val=parseFloat(d)*this.rem;
            if(typeof d==="string"&&d.match(/rem$/)){
                val+="px"
            }
            return val
        };
        flexible.px2rem=function (d) {
            var val=parseFloat(d)/this.rem;
            if(typeof d==="string"&&d.match(/px$/)){
                val += "rem"
            }
            return val
        }
})(window,window["lib"]||(window["lib"]={}));

Then add the code in index.htmlInsert picture description here

 <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device=width,initial-scale=1.0"/>

In index.html in the prior written rem.js import files to go
Insert picture description here

And add code in the index.html file
Insert picture description here

<script type="text/javascript">
    var w_win=document.documentElement.clientWidth||document.body.clientWidth;
    var _html=document.getElementsByTagName('html')[0];
    _html.style.fontSize=w_win/20+'px';
  </script>

This is considered complete, run the project.
Insert picture description here
This effect is not very obvious, let's change the style of Helloworld.vue to a smaller size
Insert picture description here
and then run it.

Insert picture description here
It's a success like this

Or we can run it
on the mobile phone, open the hotspot of the computer, connect the mobile phone, and then generate a QR code on the page of the project just now, and then scan the code on the mobile phone to see our page. (There are other methods, if the method here is not applicable, you can go to the Internet to check other methods, only this one is introduced here)
Insert picture description here

Guess you like

Origin blog.csdn.net/weixin_45667289/article/details/115002765