饼图
Framework7 带有简单的饼图组件。它生成美观的完全响应式 SVG 图表。
饼图布局
由于饼图SVG是由JavaScript生成的,因此其HTML布局尽可能简单:
<!-- Pie chart element -->
<div class="pie-chart"></div>
饼图应用方法
现在我们需要创建/初始化饼图。让我们看看与它相关的方法:
app.pieChart.create(参数)- 创建饼图实例
- 参数 - 对象. 带有饼图参数的对象
方法返回创建的饼图实例
app.pieChart.destroy(el)- 销毁饼图实例
- el - HTMLElement或字符串(使用 CSS 选择器) 或对象. 要销毁的饼图元素或饼图实例。
app.pieChart.get(el)- 通过HTML元素获取饼图实例
- el - HTMLElement或字符串(使用CSS选择器)。饼图元素。
方法返回饼图实例
app.pieChart.update(参数)- 根据传递的参数更新/重新渲染饼图SVG
- 参数 - 对象. 带有饼图参数的对象
方法返回饼图实例
饼图参数
现在我们来看看创建饼图所需的可用参数列表:
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
el | HTMLElement 字符串 | 饼图元素。HTMLElement或饼图元素的CSS选择器字符串。生成的SVG将被插入到此元素中 | |
datasets | 数组 | [] | 图表数据集。数组中的每个对象具有以下属性:datasets array
|
size | 数字 | 320 | 生成的 SVG 图像大小(以像素为单位) |
提示 | 布尔值 | false | 启用悬停提示 |
datasets | 数组 | [] | 图表数据集。数组中的每个对象具有以下属性:datasets array
|
formatTooltip | function(data) | 自定义渲染函数,必须返回提示的 HTML 内容。接收data object
| |
on | 对象 | 带有事件处理程序的对象。例如:
|
饼图方法与属性
所以要创建饼图,我们必须调用:
var pieChart = app.pieChart.create({ /* parameters */ })
之后我们就有其初始化的实例(如pieChart
示例中上面的变量)以及有用的方法和属性:
属性 | |
---|---|
pieChart.app | 链接到全局应用实例 |
pieChart.el | 饼图HTML元素 |
pieChart.$el | 包含饼图HTML元素的Dom7实例 |
pieChart.svgEl | 饼图生成的SVG HTML元素 |
pieChart.$svgEl | 带有生成 SVG HTML 元素的 Dom7 实例 |
饼图参数 | 饼图参数 |
方法 | |
pieChart.update(参数) | 根据传递的参数更新/重新渲染饼图SVG元素。它接受与饼图初始化所需的相同参数的对象。你可以只传递需要更新的参数,例如
|
pieChart.destroy() | 销毁饼图实例 |
pieChart.on(事件上触发, 处理程序) | 添加事件处理程序 |
pieChart.once(事件上触发, 处理程序) | 添加在触发后将被移除的事件处理程序 |
pieChart.off(事件上触发, 处理程序) | 移除事件处理程序 |
pieChart.off(事件上触发) | 移除指定事件的所有处理程序 |
pieChart.emit(事件上触发, ...args) | 在实例上触发事件 |
饼图事件
饼图将在饼图元素和app以及饼图实例上触发以下DOM事件:
DOM 事件
事件 | Target | 描述 |
---|---|---|
piechart:select | 饼图元素<div class="pie-chart"> | 当启用提示时,事件将在图表悬停时触发 |
piechart:beforedestroy | 饼图元素<div class="pie-chart"> | 事件将在饼图实例销毁之前被触发 |
App和饼图实例事件
饼图实例在自身实例和app实例上发出事件。App实例事件具有相同名称,以pieChart
.
事件 | 参数 | Target | 描述 |
---|---|---|---|
select | (pieChart, index, dataset) | pieChart | 当启用提示时,事件将在图表悬停时触发 |
pieChartSelect | (pieChart, index, dataset) | app | |
beforeDestroy | (pieChart) | pieChart | 事件将在饼图实例销毁之前被触发。作为参数,事件处理程序接收饼图实例 |
pieChartBeforeDestroy | (pieChart) | app |
示例
pie-chart.html
<template>
<div class="page">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="title">Pie 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 Pie Chart component.</p>
<p>Pie Chart generates SVG layout which makes it also compatible with SSR (server side rendering).</p>
</div>
<div class="block-title">Simple Pie Chart</div>
<div class="block block-strong-ios block-outline-ios">
<div class="pie-chart pie-chart-1"></div>
</div>
<div class="block-title">With Tooltip</div>
<div class="block block-strong-ios block-outline-ios">
<div class="pie-chart pie-chart-2"></div>
</div>
<div class="block-title">Custom Format Tooltip</div>
<div class="block block-strong-ios block-outline-ios">
<div class="pie-chart pie-chart-3"></div>
</div>
</div>
</div>
</template>
<script>
export default (props, { $f7, $onMounted, $onBeforeUnmount }) => {
let pieSimple;
let pieTooltip;
let pieCustomTooltip;
$onMounted(() => {
pieSimple = $f7.pieChart.create({
el: '.pie-chart-1',
datasets: [
{
value: 100,
color: '#f00',
},
{
value: 200,
color: '#0f0',
},
{
value: 300,
color: '#00f',
},
]
});
pieTooltip = $f7.pieChart.create({
el: '.pie-chart-2',
tooltip: true,
datasets: [
{
label: 'JavaScript',
value: 150,
color: '#ff0',
},
{
label: 'Vue.js',
value: 150,
color: '#0f0',
},
{
label: 'TypeScript',
value: 400,
color: '#00f',
},
]
})
pieCustomTooltip = $f7.pieChart.create({
el: '.pie-chart-3',
tooltip: true,
datasets: [
{
label: 'JavaScript',
value: 1000,
color: '#ff0',
},
{
label: 'Vue.js',
value: 100,
color: '#0f0',
},
{
label: 'TypeScript',
value: 200,
color: '#00f',
},
],
formatTooltip(data) {
const { value, label, color } = data;
return `You have <span style="color: ${color}">${value} points</span> for ${label}`;
}
})
})
$onBeforeUnmount(() => {
pieSimple.destroy();
pieTooltip.destroy();
pieCustomTooltip.destroy();
})
return $render;
}
</script>