面積圖
Framework7 附帶簡單的區域圖表元件。它會產生美觀且完全回應的 SVG 圖表。
區域圖表配置
由於區域圖表 SVG 是由 JavaScript 產生的,因此其 HTML 配置盡可能簡單
<!-- Area Chart element -->
<div class="area-chart"></div>
區域圖表 App 方法
現在我們需要建立/初始化區域圖表。讓我們看看相關的 App 方法來使用它
app.areaChart.create(參數)- 建立區域圖表實例
- 參數 - 物件。包含區域圖表參數的物件
方法會傳回建立的區域圖表的實例
app.areaChart.destroy(el)- 銷毀區域圖表實例
- el - HTMLElement 或 字串 (帶有 CSS 選擇器) 或 物件。要銷毀的區域圖表元素或區域圖表實例。
app.areaChart.get(el)- 透過 HTML 元素取得區域圖表實例
- el - HTMLElement 或 字串 (帶有 CSS 選擇器)。區域圖表元素。
方法會傳回區域圖表的實例
app.areaChart.update(參數)- 根據傳遞的參數更新/重新呈現區域圖表 SVG
- 參數 - 物件。包含區域圖表參數的物件
方法會傳回區域圖表的實例
區域圖表參數
現在讓我們看看建立區域圖表所需的可用參數清單
參數 | 類型 | 預設 | 說明 |
---|---|---|---|
el | HTMLElement 字串 | 區域圖表元素。HTMLElement 或區域圖表元素的 CSS 選擇器字串。產生的 SVG 會插入到此元素中 | |
寬度 | 數字 | 640 | 產生的 SVG 影像寬度 (以像素為單位) |
高度 | 數字 | 320 | 產生的 SVG 影像高度 (以像素為單位) |
資料集 | 陣列 | [] | 圖表資料集。資料集 陣列中的每個物件都有下列屬性
|
線條圖 | 布林值 | 假 | 啟用線條圖(取代區域圖) |
軸 | 布林值 | 假 | 啟用圖表水平(X)軸 |
軸標籤 | 陣列 | [] | 圖表水平(X)軸標籤。應與資料集值有相同數量的項目 |
工具提示 | 布林值 | 假 | 在滑鼠移入時啟用工具提示 |
圖例 | 布林值 | 假 | 啟用圖表圖例 |
切換資料集 | 布林值 | 假 | 啟用後,它會在圖例項目按一下時切換資料集 |
最大軸標籤 | 數字 | 8 | 軸上可見的最大軸標籤(刻度)數目 |
格式化軸標籤 | 函式(標籤) | 自訂呈現函式,用於格式化軸標籤文字 | |
格式化圖例標籤 | 函式(標籤) | 自訂呈現函式,用於格式化圖例標籤文字 | |
格式化工具提示 | 函式(資料) | 自訂呈現函式,必須傳回工具提示的 HTML 內容。接收到的資料 物件具有下列屬性
| |
格式化工具提示軸標籤 | 函式(標籤) | 自訂呈現函式,用於格式化工具提示中的軸標籤文字 | |
格式化工具提示總計 | 函式(總計) | 自訂呈現函式,用於格式化工具提示中的總計值文字 | |
格式化工具提示資料集 | 函式(標籤、值、顏色) | 自訂呈現函式,用於格式化工具提示中的資料集文字 | |
開啟 | 物件 | 具有事件處理常式的物件。例如
|
區域圖方法和屬性
因此,要建立區域圖,我們必須呼叫
var areaChart = app.areaChart.create({ /* parameters */ })
之後,我們會取得其初始化的執行個體(例如上方範例中的areaChart
變數),其中包含有用的方法和屬性
屬性 | |
---|---|
areaChart.app | 連結至全域應用程式執行個體 |
areaChart.el | 區域圖 HTML 元素 |
areaChart.$el | 具有區域圖 HTML 元素的 Dom7 執行個體 |
areaChart.svgEl | 區域圖產生的 SVG HTML 元素 |
areaChart.$svgEl | 具有產生的 SVG HTML 元素的 Dom7 執行個體 |
areaChart.params | 區域圖參數 |
方法 | |
areaChart.update(參數) | 根據傳遞的參數,更新/重新呈現區域圖 SVG 元素。它接受一個物件,其中包含區域圖初始化所需的相同參數。您只能傳遞需要更新的參數,例如
|
areaChart.destroy() | 銷毀區域圖執行個體 |
areaChart.on(事件, 處理常式) | 新增事件處理常式 |
areaChart.once(事件, 處理常式) | 新增事件處理常式,在觸發後將會移除 |
areaChart.off(事件, 處理常式) | 移除事件處理常式 |
areaChart.off(事件) | 移除指定事件的所有處理常式 |
areaChart.emit(事件, ...args) | 在實例上觸發事件 |
區域圖表事件
區域圖表將在區域圖表元素上觸發以下 DOM 事件,以及在應用程式和區域圖表實例上觸發事件
DOM 事件
事件 | 目標 | 說明 |
---|---|---|
areachart:select | 區域圖表元素<div class="area-chart"> | 當滑鼠移到圖表上時,將觸發事件(當啟用工具提示時) |
areachart:beforedestroy | 區域圖表元素<div class="area-chart"> | 在區域圖表實例被銷毀之前,將觸發事件 |
應用程式和區域圖表實例事件
區域圖表實例會在自身實例和應用程式實例上發出事件。應用程式實例事件具有相同的名稱,並加上 areaChart
前綴。
事件 | 參數 | 目標 | 說明 |
---|---|---|---|
select | (areaChart, index) | areaChart | 當滑鼠移到圖表上時,將觸發事件(當啟用工具提示時) |
areaChartSelect | (areaChart, index) | app | |
beforeDestroy | (areaChart) | areaChart | 在區域圖表實例被銷毀之前,將觸發事件。事件處理常式會收到區域圖表實例作為參數 |
areaChartBeforeDestroy | (areaChart) | app |
CSS 變數
以下是相關 CSS 變數(CSS 自訂屬性)清單。
:root {
--f7-area-chart-current-line-stroke-width: 2px;
--f7-area-chart-current-line-stroke: rgba(0, 0, 0, 0.15);
--f7-area-chart-axis-text-color: inherit;
--f7-area-chart-axis-height: 1px;
--f7-area-chart-axis-font-size: 10px;
--f7-area-chart-axis-font-weight: 500;
--f7-area-chart-tooltip-font-size: 12px;
--f7-area-chart-tooltip-total-font-size: 16px;
--f7-area-chart-tooltip-total-font-weight: bold;
--f7-area-chart-tooltip-color-size: 10px;
--f7-area-chart-legend-font-size: 14px;
--f7-area-chart-legend-font-weight: 500;
--f7-area-chart-legend-text-color: inherit;
--f7-area-chart-legend-padding: 4px 8px;
--f7-area-chart-legend-border-radius: 4px;
--f7-area-chart-legend-color-size: 14px;
--f7-area-chart-line-stroke-width: 2px;
--f7-area-chart-axis-bg-color: rgba(0, 0, 0, 0.15);
--f7-area-chart-legend-disabled-text-color: rgba(0, 0, 0, 0.22);
}
:root .dark,
:root.dark {
--f7-area-chart-axis-bg-color: rgba(255, 255, 255, 0.15);
--f7-area-chart-legend-disabled-text-color: rgba(255, 255, 255, 0.22);
}
.ios {
--f7-area-chart-tooltip-total-label-text-color: rgba(255, 255, 255, 0.75);
}
.md {
--f7-area-chart-tooltip-total-label-text-color: inherit;
}
範例
area-chart.html
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="title">Area Chart</div>
</div>
</div>
<div class="page-content">
<div class="block block-strong-ios block-outline-ios">
<p>Framework7 comes with simple to use and fully responsive Area Chart component.</p>
<p>Area Chart generates SVG layout which makes it also compatible with SSR (server side rendering).</p>
</div>
<div class="block-title">Simple Area Chart</div>
<div class="block block-strong-ios block-outline-ios">
<div class="area-chart area-chart-simple"></div>
</div>
<div class="block-title">Area Chart With Tooltip</div>
<div class="block block-strong-ios block-outline-ios">
<div class="area-chart area-chart-with-tooltip"></div>
</div>
<div class="block-title">Area Chart With Axis</div>
<div class="block block-strong-ios block-outline-ios">
<div class="area-chart area-chart-with-axis"></div>
</div>
<div class="block-title">Area Chart With Legend</div>
<div class="block block-strong-ios block-outline-ios">
<div class="area-chart area-chart-with-legend"></div>
</div>
<div class="block-title">Lines Chart</div>
<div class="block block-strong-ios block-outline-ios">
<div class="area-chart area-chart-lines"></div>
</div>
</div>
</div>
</template>
<script>
export default (props, { $f7, $onMounted, $onBeforeUnmount }) => {
let areaSimple;
let areaWithTooltip;
let areaWithAxis;
let areaWithLegend;
let areaLines;
// helpers data for axis
const dates = [];
const today = new Date();
const year = today.getFullYear();
const month = today.getMonth();
for (let i = 0; i < 4; i += 1) {
dates.push(new Date(year, month - (3 - i)))
}
const axisDateFormat = Intl.DateTimeFormat(undefined, { month: 'short', year: 'numeric' })
const tooltipDateFormat = Intl.DateTimeFormat(undefined, { month: 'long', year: 'numeric' })
$onMounted(() => {
areaSimple = $f7.areaChart.create({
el: '.area-chart-simple',
datasets: [
{
color: '#f00',
values: [0, 100, 250, 300, 175, 400]
},
{
color: '#00f',
values: [100, 75, 133, 237, 40, 200]
},
{
color: '#ff0',
values: [100, 300, 127, 40, 250, 80]
},
]
});
areaWithTooltip = $f7.areaChart.create({
el: '.area-chart-with-tooltip',
tooltip: true,
datasets: [
{
label: 'Red data',
color: '#f00',
values: [100, 75, 133, 237, 40, 200]
},
{
label: 'Blue data',
color: '#00f',
values: [100, 300, 127, 40, 250, 80]
},
{
label: 'Yellow data',
color: '#ff0',
values: [0, 100, 250, 300, 175, 400]
},
]
});
areaWithAxis = $f7.areaChart.create({
el: '.area-chart-with-axis',
tooltip: true,
axis: true,
axisLabels: dates,
formatAxisLabel(date) {
return axisDateFormat.format(date);
},
formatTooltipAxisLabel(date) {
return tooltipDateFormat.format(date);
},
datasets: [
{
label: 'Green data',
color: '#0f0',
values: [100, 75, 133, 237]
},
{
label: 'Red data',
color: '#f00',
values: [100, 300, 127, 47]
},
{
label: 'Yellow data',
color: '#ff0',
values: [0, 100, 250, 307]
},
]
});
areaWithLegend = $f7.areaChart.create({
el: '.area-chart-with-legend',
tooltip: true,
axis: true,
axisLabels: dates,
legend: true,
toggleDatasets: true,
formatAxisLabel(date) {
return axisDateFormat.format(date);
},
formatTooltipAxisLabel(date) {
return tooltipDateFormat.format(date);
},
datasets: [
{
label: 'Red data',
color: '#f00',
values: [100, 300, 127, 47]
},
{
label: 'Blue data',
color: '#00f',
values: [100, 75, 133, 237]
},
{
label: 'Yellow data',
color: '#ff0',
values: [0, 100, 250, 307]
},
]
});
areaLines = $f7.areaChart.create({
el: '.area-chart-lines',
tooltip: true,
axis: true,
axisLabels: dates,
legend: true,
toggleDatasets: true,
lineChart: true,
formatAxisLabel(date) {
return axisDateFormat.format(date);
},
formatTooltipAxisLabel(date) {
return tooltipDateFormat.format(date);
},
datasets: [
{
label: 'Red data',
color: '#f00',
values: [0, 300, 127, 47]
},
{
label: 'Blue data',
color: '#00f',
values: [0, 75, 133, 237]
},
{
label: 'Green data',
color: '#0f0',
values: [0, 100, 250, 307]
},
]
});
})
$onBeforeUnmount(() => {
areaSimple.destroy();
areaWithTooltip.destroy();
areaWithAxis.destroy();
areaWithLegend.destroy();
areaLines.destroy();
})
return $render;
}
</script>