在Chart.js上显示自定义tooltip
2014-07-13 11:52
1666 查看
Chart.js允许通过HTML5的canvas进行图表绘制。这里我们希望绘制一个环形图,点击图上各segment时可以显示自定义的圆形tooltip。
Chart.js支持通过几个变量添加tooltip,它提供一个tooltipTemplate但是却不支持自定义tooltip的HTML!于是决定自行绘制tooltip手动添加上去。
1. 绘制一个tooltip
CSS:
HTML:
2. 通过Chart.js绘制一个环形图
HTML:
JS:
3. 每当我点击一个segment的时候,需要自定义的tooltip出现在该segment中心位置。所以需要计算segment中心的坐标
这个function中,需要提供segment初始和最终的角度,环形内外圆半径和环形中心坐标。这些数值我们可以通过以下方式获得
4. 最后设置只有当在任意segment上点击的时候才出现tooltip
HTML: 将tooltip改为初始不可见
JS: 在计算出的中心位置显示tooltip
具体代码见: http://jsfiddle.net/NXPhL/277/
Chart.js支持通过几个变量添加tooltip,它提供一个tooltipTemplate但是却不支持自定义tooltip的HTML!于是决定自行绘制tooltip手动添加上去。
1. 绘制一个tooltip
CSS:
.ft{ background:#bbaabb; position:absolute; left:100px; top:150px; } .circle{ width:100px; height:100px; border-radius:50px; font-size:20px; color:#fff; line-height:100px; text-align:center; background:#aa9966}
HTML:
<div id="t" class="ft circle">$100.23M</div>
2. 通过Chart.js绘制一个环形图
HTML:
<canvas id="myChart" width="390" height="390"></canvas>
JS:
var data = [{ value: 30, color: "#FA797A", highlight: "#F7464A" }, { value: 50, color: "#E2EAE9", highlight: "#E1D9D9" }, { value: 100, color: "#D4CCC5", highlight: "#D2BCB5" }, { value: 40, color: "#949FB1", highlight: "#928EA1" }, { value: 120, highlight: "#C69CBE", color: "#C89DCE" } ] var options = { animation: false, showTooltips: true, segmentStrokeWidth:2, percentageInnerCutout:80, segmentShowStroke : true, segmentStrokeColor : "#fff", tooltipTemplate : "", tooltipEvents: ["mousemove", "touchstart", "touchmove"], }; //Get the context of the canvas element we want to select var c = $('#myChart'); var ct = c.get(0).getContext('2d'); var ctx = document.getElementById("myChart").getContext("2d"); /*************************************************************************/ myNewChart = new Chart(ct).Doughnut(data, options); }
3. 每当我点击一个segment的时候,需要自定义的tooltip出现在该segment中心位置。所以需要计算segment中心的坐标
var calc = function(startAngle, endAngle, outerRadius, innerRadius ,x,y ){ var centreAngle = startAngle + ((endAngle - startAngle) / 2); var rangeFromCentre = (outerRadius - innerRadius) / 2 + innerRadius; return { x : x + (Math.cos(centreAngle) * rangeFromCentre), y : y + (Math.sin(centreAngle) * rangeFromCentre) }; }
这个function中,需要提供segment初始和最终的角度,环形内外圆半径和环形中心坐标。这些数值我们可以通过以下方式获得
var activePoints = myNewChart.getSegmentsAtEvent(e); var chart = $("#myChart"); var chartCenterX = chart.position().left + chart.width()/2; var chartCenterY = chart.position().top + chart.height()/2; var arc = activePoints[0]; var arcCenter = calc(arc.startAngle, arc.endAngle, arc.outerRadius, arc.innerRadius, chartCenterX, chartCenterY); var arcCenterX = arcCenter.x; var arcCenterY = arcCenter.y;
4. 最后设置只有当在任意segment上点击的时候才出现tooltip
HTML: 将tooltip改为初始不可见
<div id="t" class="ft circle" style="display:none" >$100.23M</div>
JS: 在计算出的中心位置显示tooltip
$(".ft").css({"left": arcCenterX-$("#t").width()/2, "top":arcCenterY-$("#t").height()/2, "display":"block"}); $(".ft").text("$"+arc.value+"M"); $(".ft").show();
具体代码见: http://jsfiddle.net/NXPhL/277/
相关文章推荐
- JS+DIV实现自定义Title的显示方式
- 7.10 WPF 流水账 Tooltip自定义模版后不能显示内容的问题——ControlTemplate的秘密
- C# ListView 自定义ToolTip 显示
- 【SSH网上商城项目实战29】使用JsChart技术在后台显示商品销售报表
- js实现自定义话框的移动和剧中显示
- asp.net中自定义tooltip的显示
- Angular.js中用ng-repeat-start实现自定义显示
- 自定义highchart tooltip
- crm2011中通过JS脚本方式显示和隐藏ribbon中的自定义按钮
- 【SSH网上商城项目实战29】使用JsChart技术在后台显示商品销售报表
- Jquery Js ExtJs 弹出带图层的自定义图片显示
- 浮动居中js广告插件,支持详细的自定义:最大化播放时长,二次最大化间隔,不显示的url等
- Flex柱状图(包含线性图)自定义显示tooltip
- ios开发中WebView,去除(自定义)JS中Alert显示的网址
- Dynamics CRM2011中通过JS脚本方式显示和隐藏ribbon中的自定义按钮
- 格式化与自定义Slider中显示的Tooltip
- 自定义ToolTip的显示
- js--easyUI datetimebox 自定义显示格式 .
- chart.js绘图,如何显示图例?
- Angular.js中用ng-repeat-start实现自定义显示