1. 程式人生 > 其它 >【HZHE002】黃子涵學習Echarts

【HZHE002】黃子涵學習Echarts

概念篇

下面,我們就常見的幾種使用場景,介紹如何初始化一個圖表以及改變其大小。

圖表容器及大小

通常來說,需要在 HTML 中先定義一個 <div> 節點,並且通過 CSS 使得該節點具有寬度和高度。初始化的時候,傳入該節點,圖表的大小預設即為該節點的大小,除非聲明瞭 opts.widthopts.height 將其覆蓋。

<div id="huangzihan" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        var HZHChart = echarts.init(document.getElementById('huangzihan'));
    </script>

需要注意的是,使用這種方法在呼叫 echarts.init 時需保證容器已經有寬度和高度了。

初始化

在 HTML 中定義有寬度和高度的父容器(推薦)

指定圖表的大小

如果圖表容器不存在寬度和高度,或者,你希望圖表寬度和高度不等於容器大小,也可以在初始化的時候指定大小。

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>黃子涵學習Echarts</title>
    <script src="echarts.js"></script>
</head>

<body>
    <div id="huangzihan"></div>
    <script type="text/javascript">
        var HZHChart = echarts.init(document.getElementById('huangzihan'), null, {
            width: 600,
            height: 400
        });
    </script>
</body>

</html>

響應容器大小的變化

監聽圖表容器的大小並改變圖表大小

在有些場景下,我們希望當容器大小改變時,圖表的大小也相應地改變。

比如,圖表容器是一個高度為 400px、寬度為頁面 100% 的節點,你希望在瀏覽器寬度改變的時候,始終保持圖表寬度是頁面的 100%。

這種情況下,可以監聽頁面的 window.onresize 事件獲取瀏覽器大小改變的事件,然後呼叫 echartsInstance.resize 改變圖表的大小。

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>黃子涵學習Echarts</title>
    <script src="echarts.js"></script>
    <style>
        #huangzihan,
        html,
        body {
            width: 100%;
        }

        #huangzihan {
            height: 400px;
        }
    </style>
</head>

<body>
    <div id="huangzihan"></div>
    <script type="text/javascript">
        var HZHChart = echarts.init(document.getElementById('huangzihan'));
        window.onresize = function () {
            HZHChart.resize();
        };
    </script>
</body>

</html>

為圖表設定特定的大小

除了直接呼叫 resize() 不含引數的形式之外,還可以指定寬度和高度,實現圖表大小不等於容器大小的效果。

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>黃子涵學習Echarts</title>
    <script src="echarts.js"></script>
</head>

<body>
    <div id="huangzihan"></div>
    <script type="text/javascript">
        var HZHChart = echarts.init(document.getElementById('huangzihan'));
        window.onresize = function () {
            HZHChart.resize({
                width: 800,
                height: 400
            });
        };
    </script>
</body>

</html>
小貼士

閱讀 API 文件的時候要留意介面的定義方式,這一介面有時會被誤認為是 myCharts.resize(800, 400) 的形式,但其實不存在這樣的呼叫方式。

容器節點被銷燬以及被重建時

假設頁面中存在多個標籤頁,每個標籤頁都包含一些圖表。當選中一個標籤頁的時候,其他標籤頁的內容在 DOM 中被移除了。這樣,當用戶再選中這些標籤頁的時候,就會發現圖表“不見”了。

本質上,這是由於圖表的容器節點被移除導致的。即使之後該節點被重新新增,圖表所在的節點也已經不存在了。

正確的做法是,在圖表容器被銷燬之後,呼叫 echartsInstance.dispose 銷燬例項,在圖表容器重新被新增後再次呼叫 echarts.init 初始化。

小貼士

在容器節點被銷燬時,總是應呼叫 echartsInstance.dispose 以銷燬例項釋放資源,避免記憶體洩漏。