ChartJS v2:点击坐标处的刻度值(时间刻度)

6jygbczu  于 2022-11-06  发布在  Chart.js
关注(0)|答案(2)|浏览(256)

我有一个基于时间的折线图,我试图在点击坐标处获得每个刻度的值。
我在ChartJS选项中指定的onClick函数:

  1. onClick: function(event, elementsAtEvent)
  2. {
  3. console.log(event, elementsAtEvent, this);
  4. var valueX = null, valueY = null;
  5. for (var scaleName in this.scales) {
  6. var scale = this.scales[scaleName];
  7. console.log(scale.id, scale.isHorizontal());
  8. if (scale.isHorizontal()) {
  9. valueX = scale.getValueForPixel(event.offsetX);
  10. } else {
  11. valueY = scale.getValueForPixel(event.offsetY);
  12. }
  13. }
  14. console.log(event.offsetX, valueX, null, event.offsetY, valueY);
  15. },

JSF中间文件:https://jsfiddle.net/AllenJB/dmebo9g5/1/
上面的代码似乎适用于Y轴,但不适用于X轴(时间刻度)-无论您在图表中的哪个位置单击,它总是返回最后一个值。
我可能做错了什么?

a1o7rhls

a1o7rhls1#

这段代码实际上运行得很好,唯一的问题是我查看了moment对象的_i值,以检查它的值(这是创建对象时用作初始输入的值,不一定是当前值)。
将console.log行更改为以下内容可产生预期/正确的结果:

  1. console.log(event.offsetX, valueX.format('YYYY-MM-DD HH:mm:ss'), null, event.offsetY, valueY);
db2dz4w8

db2dz4w82#

如果要获取最接近的x轴值,可以使用以下方法:

  1. onClick: function (event) {
  2. const activeElements = this.getElementsAtXAxis(event);
  3. const xval = this.scales['x-axis-0']._timestamps.data[activeElements[0]._index];
  4. console.log(xval)
  5. }

相关问题