当前位置: 首页 > 知识库问答 >
问题:

ChartJS onclick填充区域(雷达图)

邵修诚
2023-03-14

我试图在JQuery中创建一个函数来增加和减少点击点。我已经创建了增加点数的onclick事件,但不知道如何减少点数。

$("#radarChart").click(
    function (evt) {
        var activePoints = myRadarChart.getPointsAtEvent(evt);
        var Values = activePoints[0].label + ' = ' + activePoints[0].value;
        activePoints[0].value++;
    }
);

上面的函数增加点的值,当点击,为了减少它,我需要知道是否填充的区域是点击。

我查看了ChartJS文档,但没有碰到它。其他图表也有它,例如极地面积图,当你悬停一个部分时,它会高亮显示,这意味着有一个功能可以检测鼠标悬停在段上。

雷达图中是否存在类似的功能?

我的密码本。

如果不是的话,我会很感激我如何做到这一点的任何想法。

我能想到的唯一的选择是创建10个按钮,5个标签。按钮将是+和-,增加和减少标签。在我看来,这占用了太多的空间,所以我在尽量避免。

谢谢,

共有1个答案

商璞
2023-03-14

实际上没有特定的Chart.js API来完成您想要的操作,但是使用canvas API和一些几何图形可以获得相同的结果。

基本上,如果用户单击当前值的区域之外,您希望增加该值,如果用户单击当前值的区域之内,您希望减少该值。

我修改了您的click处理程序来实现这一点。

function getElementPosition(obj) {
  var curleft = 0, curtop = 0;
  if (obj.offsetParent) {
    do {
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
    } while (obj = obj.offsetParent);
      return { x: curleft, y: curtop };
  }
  return undefined;
};

function getEventLocation(element,event){
  // Relies on the getElementPosition function.
  var pos = getElementPosition(element);

  return {
    x: (event.pageX - pos.x),
    y: (event.pageY - pos.y)
  };
};

function pointDistance(point1, point2) {
  return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
};

//Get the context of the Radar Chart canvas element we want to select
var ctx = document.getElementById("radarChart").getContext("2d");

// Create the Radar Chart
var myRadarChart = new Chart(ctx).Radar(radarData, radarOptions);

$("#radarChart").click(function (evt) {
  var eventLocation = getEventLocation(this,evt); 
  var activePoints = myRadarChart.getPointsAtEvent(evt);
  var eventLocDistToCenter = pointDistance({x: myRadarChart.scale.xCenter, y: myRadarChart.scale.yCenter}, eventLocation);
  var activePointDistToCenter = pointDistance({x: myRadarChart.scale.xCenter, y: myRadarChart.scale.yCenter}, activePoints[0]);

  if (eventLocDistToCenter < activePointDistToCenter) {
    activePoints[0].value--;
  } else {
    activePoints[0].value++;
  }

  myRadarChart.update();
});

注意,我还添加了对.update()的调用,以便图表立即呈现更改。以您实现它的方式,直到下一次呈现时(即鼠标移动时),您才会看到图表的更改。

这里是从您的工作解决方案中分叉出来的代码页。点击四周查看。

最后,您可能需要考虑升级到Chart.js2.0(最新版本为2.5)。1.0长期不受支持,最新版本有很多改进。你应该可以很容易地把它移植过来。如果你需要帮助,可以发布一个新的问题。

 类似资料:
  • 下面的php代码用于预填充输入框,但不适用于文本区域。问题是标准输入框的高度很小,所以文本显示在一行上。我尝试使用文本区域,但它出现空白时,呈现。代码显示了这两种方法,工作方法,然后是文本区域方法。有谁能给出建议吗?

  • 我想用一种颜色填充剩余的空白,但我找不到任何方法来做到这一点,我是ios开发的初学者 我的应用的照片:

  • 问题内容: 编辑Png图像例如,更改特定区域并在该区域填充颜色。 我想更改仅图像选择区域的颜色。就像第一个用户选择一种颜色,然后他选择一个图像一样,之后他可以用所选颜色更改图像颜色的特定区域。 之后,他也可以保存该图像,这可能吗?像Color公司的网站使用这种东西。 像下面的URL https://www.sherwin- williams.com/visualizer#/active 问题答案:

  • 使用下面的代码,我可以在加载到画布中的图像上绘制一个区域,并用一些颜色填充绘制的区域。 现在,我需要用图像而不是颜色填充绘制区域。比如: 帆布fillStyle='url(myimage.jpg)'; 而不是 帆布fillStyle='#123456'//填充颜色示例 HTML: jquery。拉票。min.js

  • 问题内容: 我正在尝试阴影绘制的两条曲线之间的区域。这是我绘制的。 使用以下代码。 我尝试使用,但是要使其正常工作,我需要在上具有相同的数据(将需要执行)。是否有其他功能可能对此有所帮助,还是我使用的是错误的功能。 问题答案: 您可以尝试: 例如:

  • 我正在绘制一条黑体曲线,并希望填充曲线下3到5微米范围内的区域。但是,我不知道如何在这里使用或命令