我试图在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个标签。按钮将是+和-,增加和减少标签。在我看来,这占用了太多的空间,所以我在尽量避免。
谢谢,
实际上没有特定的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长期不受支持,最新版本有很多改进。你应该可以很容易地把它移植过来。如果你需要帮助,可以发布一个新的问题。