面積圖

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

  • 參數 - 物件。包含區域圖表參數的物件

方法會傳回區域圖表的實例

區域圖表參數

現在讓我們看看建立區域圖表所需的可用參數清單

參數類型預設說明
elHTMLElement
字串
區域圖表元素。HTMLElement 或區域圖表元素的 CSS 選擇器字串。產生的 SVG 會插入到此元素中
寬度數字640產生的 SVG 影像寬度 (以像素為單位)
高度數字320產生的 SVG 影像高度 (以像素為單位)
資料集陣列[]圖表資料集。資料集陣列中的每個物件都有下列屬性
/** Dataset value */
values: number[];
/** Dataset HEX color */
color?: string;
/** Dataset label */
label?: string;
線條圖布林值啟用線條圖(取代區域圖)
布林值啟用圖表水平(X)軸
軸標籤陣列[]圖表水平(X)軸標籤。應與資料集值有相同數量的項目
工具提示布林值在滑鼠移入時啟用工具提示
圖例布林值啟用圖表圖例
切換資料集布林值啟用後,它會在圖例項目按一下時切換資料集
最大軸標籤數字8軸上可見的最大軸標籤(刻度)數目
格式化軸標籤函式(標籤)自訂呈現函式,用於格式化軸標籤文字
格式化圖例標籤函式(標籤)自訂呈現函式,用於格式化圖例標籤文字
格式化工具提示函式(資料)自訂呈現函式,必須傳回工具提示的 HTML 內容。接收到的資料物件具有下列屬性
index: number;
total: number;
datasets: {
  color?: string;
  label: any;
  value: number;
}
格式化工具提示軸標籤函式(標籤)自訂呈現函式,用於格式化工具提示中的軸標籤文字
格式化工具提示總計函式(總計)自訂呈現函式,用於格式化工具提示中的總計值文字
格式化工具提示資料集函式(標籤、值、顏色)自訂呈現函式,用於格式化工具提示中的資料集文字
開啟物件

具有事件處理常式的物件。例如

var areaChart = app.areaChart.create({
  el: '.area-chart',
  on: {
    beforeDestroy: function () {
      console.log('Area Chart will be destroyed')
    }
  }
})

區域圖方法和屬性

因此,要建立區域圖,我們必須呼叫

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 元素。它接受一個物件,其中包含區域圖初始化所需的相同參數。您只能傳遞需要更新的參數,例如
var areaChart = app.areaChart.create({
  datasets: datasetsA,
  // ...
});

// and when we need to update rendered SVG based on new datasets:
areaChart.update({
  datasets: datasetsB,
});
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>