javascript – chart js tooltip如何控制显示的数据

前端之家收集整理的这篇文章主要介绍了javascript – chart js tooltip如何控制显示的数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用chart.js插件并通过栏视图使用组图表.
当我悬停一组酒吧时,我可以看到一个工具提示,向我显示这些酒吧的数据.
但是当我将鼠标悬停在条形数据上时,我应该更改工具提示显示我唯一的单个数据.
而我该如何显示不同的数据信息.
jsfiddle example
  1. var ctx = document.getElementById("errorChart").getContext("2d");
  2. var data = {
  3. labels: ["January","February","March","April","May","June","July"],datasets: [
  4. {
  5. label: "My First dataset",fillColor: "rgba(220,220,0.5)",strokeColor: "rgba(220,0.8)",highlightFill: "rgba(220,0.75)",highlightStroke: "rgba(220,1)",data: [65,0]
  6. },{
  7. label: "My Second dataset",fillColor: "rgba(151,187,205,strokeColor: "rgba(151,highlightFill: "rgba(151,highlightStroke: "rgba(151,data: [28,48,40,19,86,27,90]
  8. }
  9. ]
  10. };
  11. var myBarChart = new Chart(ctx).Bar(data);

解决方法

您可以扩展条形图以包含此功能.默认情况下,它将返回您悬停的索引处的两个条形图,它还会在创建工具提示之前检查您悬停的区域中的多个条形图,并将缺少的任何额外条目放入其中.

所以要做到这一点,你需要覆盖两个函数getBarsAtEvent和showToolTip这里是一个例子和fiddle

我试图清楚地看到已经改变的两个重要区域,看看扩展栏类型中的注释.对帮助者的任何引用也进行了小的更改,因为它们在范围内,但现在需要显式调用Chart.helpers

  1. Chart.types.Bar.extend({
  2.  
  3. name: "BarOneTip",initialize: function(data){
  4. Chart.types.Bar.prototype.initialize.apply(this,arguments);
  5. },getBarsAtEvent : function(e){
  6. var barsArray = [],eventPosition = Chart.helpers.getRelativePosition(e),datasetIterator = function(dataset){
  7. barsArray.push(dataset.bars[barIndex]);
  8. },barIndex;
  9.  
  10. for (var datasetIndex = 0; datasetIndex < this.datasets.length; datasetIndex++) {
  11. for (barIndex = 0; barIndex < this.datasets[datasetIndex].bars.length; barIndex++) {
  12. if (this.datasets[datasetIndex].bars[barIndex].inRange(eventPosition.x,eventPosition.y)){
  13.  
  14. //change here to only return the intrested bar not the group
  15. barsArray.push(this.datasets[datasetIndex].bars[barIndex]);
  16. return barsArray;
  17. }
  18. }
  19. }
  20.  
  21. return barsArray;
  22. },showTooltip : function(ChartElements,forceRedraw){
  23. console.log(ChartElements);
  24. // Only redraw the chart if we've actually changed what we're hovering on.
  25. if (typeof this.activeElements === 'undefined') this.activeElements = [];
  26.  
  27. var isChanged = (function(Elements){
  28. var changed = false;
  29.  
  30. if (Elements.length !== this.activeElements.length){
  31. changed = true;
  32. return changed;
  33. }
  34.  
  35. Chart.helpers.each(Elements,function(element,index){
  36. if (element !== this.activeElements[index]){
  37. changed = true;
  38. }
  39. },this);
  40. return changed;
  41. }).call(this,ChartElements);
  42.  
  43. if (!isChanged && !forceRedraw){
  44. return;
  45. }
  46. else{
  47. this.activeElements = ChartElements;
  48. }
  49. this.draw();
  50. console.log(this)
  51. if (ChartElements.length > 0){
  52.  
  53. //removed the check for multiple bars at the index now just want one
  54. Chart.helpers.each(ChartElements,function(Element) {
  55. var tooltipPosition = Element.tooltipPosition();
  56. new Chart.Tooltip({
  57. x: Math.round(tooltipPosition.x),y: Math.round(tooltipPosition.y),xPadding: this.options.tooltipXPadding,yPadding: this.options.tooltipYPadding,fillColor: this.options.tooltipFillColor,textColor: this.options.tooltipFontColor,fontFamily: this.options.tooltipFontFamily,fontStyle: this.options.tooltipFontStyle,fontSize: this.options.tooltipFontSize,caretHeight: this.options.tooltipCaretSize,cornerRadius: this.options.tooltipCornerRadius,text: Chart.helpers.template(this.options.tooltipTemplate,Element),chart: this.chart
  58. }).draw();
  59. },this);
  60.  
  61. }
  62. return this;
  63. }
  64.  
  65. });

然后使用它只是做你以前做过的事情,但是使用BarOneTip(无论你喜欢什么,你都可以使用扩展图表的名称属性).

  1. var ctx = document.getElementById("errorChart").getContext("2d");
  2. var data = {
  3. labels: ["January",90]
  4. }
  5. ]
  6. };
  7.  
  8.  
  9. var myBarChart = new Chart(ctx).BarOneTip(data);

我应该提一下,如果chartjs得到更新,你需要手动将任何更改添加到被覆盖的函数

猜你在找的JavaScript相关文章