1. 程式人生 > 其它 >資料大屏開發基礎(echarts+rem.js)

資料大屏開發基礎(echarts+rem.js)

技術標籤:JavaScriptjavascriptcsshtml

目前資料大屏開發專案比較多,但很多新手不清楚從何下手,其實上手很容易;另外 ,當前流行前端框也有很多,比如angularJs, vueJs,reactJs等;不過不必使用這些框架增加額外的學習成本,也可以快速開發資料大屏。這裡直接使用html+css+js+echarts進行講解。

1.大屏尺寸

這裡使用1920*1080為例。

2.建立rem.js檔案

程式碼如下:

!function(n){
    var  e=n.document,
         t=e.documentElement,
         i=1920,
         d=i/100,
         o="orientationchange"in n?"orientationchange":"resize",
         a=function(){
             var n=t.clientWidth||320;n>i&&(n=i);
             t.style.fontSize=n/d+"px"
         };
         e.addEventListener&&(n.addEventListener(o,a,!1),e.addEventListener("DOMContentLoaded",a,!1))
}(window);

當前大屏寬度為1920,故i=1920;如果設計稿為其他尺寸,修改為對應寬度即可。

設定好後,將該檔案引入到html頁面中即可。

3.樣式書寫

div.screen-box{ width: 19.2rem; height: 10.8rem; margin: 0 auto; }

由於rem.js引入並設定為1920,故直接書寫量出的實際尺寸即可。由2中程式碼可知"d"的值為"i/100",故樣式中rem值為實際尺寸/100,所以1920px=19.2rem。

使用rem使用單位後,可以不同螢幕上正常預覽大屏了。

這是由於rem.js執行後,會獲取當前螢幕的寬度,重新計算得出新值賦於html節點上;而rem單位是根據根元素html上的font-size大小來變化的,正是基於這個出發,我們可以在每個裝置下根據裝置穩定度設定對應的html字號,從而實現自適應佈局。如螢幕為1920px時,html上font-size值應為100px;如果小於1920px則如下圖,rem.js會重新賦值。

如此一來,大家就不必再使用百分比去書寫樣式了,使用rem作為單位就可以1:1完整書寫出頁面佈局了。

4.echarts使用

引入地址:https://cdn.bootcdn.net/ajax/libs/echarts/5.0.1/echarts.min.js

html書寫:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>標題</title>
	<link rel="stylesheet" type="text/css" href="css/style.css" />
    <script type="text/javascript" src="js/rem.js"></script>
	<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/echarts/5.0.1/echarts.min.js"></script>
</head>
<body>
    <div class="screen-box">
        <div class="echart-box" id="map"></div>
    </div>
</body>
</html>

樣式書寫:

/*如圖表尺寸為500px*350px,樣式應為*/
div.echart-box{ width: 5rem; height: 3.5rem; }

js書寫:

function create(){
    var chart = echarts.init(document.getElementById('map'));
    chart.setOption({
        //書寫圖表引數...
    });
}

//執行建立圖表函式
create();

由於使用的單位是rem,rem又是根據html上的font-size的大小來變化的;所以頁面剛載入時,rem.js剛剛執行,可能建立圖表時,出現獲取不到實際的寬和高。故解決方案如下:

window.onload = function(){
    setTimeout(function(){
        create();
    }, 50);
}

如上程式碼所示,延遲建立圖表即可。