ExtJs饼状图没有《【ExtJs】柱状图,改变每条柱子的颜色》(点击打开链接)这么难做,因为其每块拼饼的颜色都是天生不同的,不用自己写渲染器。关键是做好动画效果。
一、基本目标
比如如下图的带动画的ExtJs饼状图效果。鼠标悬停到某块拼饼上面,会突出出来。
二、制作过程
还是与《【ExtJs】柱状图,改变每条柱子的颜色》(点击打开链接)、《【ExtJs】折线图》(点击打开链接)一样,在ExtJs4中的任意图表都要先定义对应的模型与数据中心。
Ext.define('graphData',{
extend:'Ext.data.Model',
fields:[
{name:'graphName',type:'string'},
{name:'graphData',type:'int'}
]
});
var graphDataStore=Ext.create('Ext.data.Store',{
model:'graphData',
data:[
{graphName:"A",graphData:700},
{graphName:"B",graphData:800},
{graphName:"C",graphData:600},
{graphName:"D",graphData:50}
]
});
之后,关键是柱状图的绘制,详情见注释:
var chart = new Ext.chart.Chart({
width: 480,
height: 400,
store: graphDataStore,
renderTo: Ext.getBody(),
shadow: false,//一定会关闭阴影,否则拼饼突出的时候很不好看。
series: [{
type: 'pie',
field: 'graphData',
label: {//这里能够使拼饼上面显示,该拼饼属于的部分
field: 'graphName',
display: 'rotate',
font: '18px "Arial"'
},
highlight: {//这里是突出效果的声明,margin越大,鼠标悬停在拼饼上面,拼饼突出得越多
segment: {
margin: 5
}
},
animate: true
}]
});
三、总结
因此,整个pie.html的代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>饼状图</title>
<script type="text/javascript" src="../js/ext-all.js"></script>
<script type="text/javascript" src="../js/bootstrap.js"></script>
<script type="text/javascript" src="../js/ext-lang-zh_CN.js"></script>
<link href="../ext-theme-classic/ext-theme-classic-all.css" rel="stylesheet" type="text/css">
</head>
<body>
</body>
</html>
<script>
Ext.onReady(function(){
Ext.define('graphData',{
extend:'Ext.data.Model',
fields:[
{name:'graphName',type:'string'},
{name:'graphData',type:'int'}
]
});
var graphDataStore=Ext.create('Ext.data.Store',{
model:'graphData',
data:[
{graphName:"A",graphData:700},
{graphName:"B",graphData:800},
{graphName:"C",graphData:600},
{graphName:"D",graphData:50}
]
});
var chart = new Ext.chart.Chart({
width: 480,
height: 400,
store: graphDataStore,
renderTo: Ext.getBody(),
shadow: false,//一定会关闭阴影,否则拼饼突出的时候很不好看。
series: [{
type: 'pie',
field: 'graphData',
label: {//这里能够使拼饼上面显示,该拼饼属于的部分
field: 'graphName',
display: 'rotate',
font: '18px "Arial"'
},
highlight: {//这里是突出效果的声明,margin越大,鼠标悬停在拼饼上面,拼饼突出得越多
segment: {
margin: 5
}
},
animate: true
}]
});
});
</script>