解決移動端rem加載瞬間頁面錯亂的方法(放大或者縮小)


  移動端布局有很多種,這里我們最常使用到rem+百分比的布局方式(高度/字體設置rem單位,寬度設置百分比)來處理屏幕兼容,這種方法在兼容上是比較不錯的,可以使得字體以及整體適應各種大小的屏幕,可以解決ipad等比較大屏幕的適應兼容。然而發現一些問題。頁面在加載未完成前會出現瞬間錯亂的現象,雖然時間不算長,但是肉眼可見,必須解決(此處以750像素的設計圖為例)——加載前后頁面如下圖所示:

  可以清楚的看到,加載未完成前的一小會兒,頁面會出現一瞬間的崩塌現象。一開始沒怎么在意這個問題,后來發現這樣的頁面的確影響視覺,我們知道頁面加載順序通常是”從上往下”加載的,所以在內容區域,也就是body以及body包含的DOM還未被瀏覽器遍歷之前,我們就應該將html的font-size計算好,所以我們應當把計算字體的js放在body之前。以下是解決方法:

1.在公共的css文件設置html的根字體為font-size:100px;這樣問題就解決了。等到js計算出新的根字體大小就會把原來css定義的大小覆蓋,這樣就可以解決也頁面打開時的瞬間崩塌現象了

<script type="text/javascript">
   function resize() {
    var htmlEle = document.documentElement; 
    var htmlWidth = window.innerWidth;
    if(!htmlWidth) return;
    if(htmlWidth >= 750){
        htmlEle.style.fontSize = '100px';
    }else{
        htmlEle.style.fontSize = 100 * (htmlWidth / 750) + 'px';
    }
    resize();
</script>

2.進行body進行預先隱藏處理

這里為什么不用display?display設置none是直接移除元素,而visibility設置的hidden只是將元素隱藏,保留其原本的位置。

<body id="body" style="visibility:hidden;">
3.設置定時器setTimeout

定時器在加載方法1毫秒之后,對body進行visible,這1毫秒的時候基本是可以忽視。

<script type="text/javascript">
    setTimeout(function(){
        document.getElementById('body').style.visibility = 'visible';
    },1);
</script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM