1

我正在做一个可视化项目。根据我的数据,我在画布上绘制了数百个小圆圈。我想添加一个鼠标悬停事件,这样只要鼠标是一个圆圈的封闭区域,它就会将我的数据中的一些节点属性显示为工具提示或画布上的文本。我当前的 drawCircle 方法

function drawCircle(canvas,x,y,r) 
{
    canvas.strokeStyle = "#000000";
    canvas.fillStyle = "#FFFF00";
    canvas.lineWidth = 2;
    canvas.beginPath();
    canvas.arc(x,y,r,0,Math.PI*2,true);
    canvas.stroke();
    canvas.fill();
    canvas.closePath();
}

我研究了kinetic.js 但无法弄清楚如何使用他们的库调用我的 drawCircle [重复] 方法。

任何帮助将不胜感激。

4

1 回答 1

3

如果您仍然想使用 KineticJS,您可以将 Kinetic 形状的东西放在您的 drawCircle 例程中。这基本上是从他们的教程中提取出来的并被剥离:

function drawCircle(stage,x,y,r) {
  var circle = new Kinetic.Shape(function(){
    var context = this.getContext();
    // draw the circle here: strokeStyle, beginPath, arc, etc...
  });
  circle.addEventListener("mouseover", function(){
    // do something
  });
  stage.add(circle);
}

如果您毕竟不想使用 KineticJS,则需要自己记住绘制的每个圆的位置和半径,然后执行以下操作:

canvas.onmouseover = function onMouseover(e) {
  var mx = e.clientX - canvas.clientLeft;
  var my = e.clientY - canvas.clientTop;
  // for each circle...
  if ((mx-cx)*(mx-cx)+(my-cy)*(my-cy) < cr*cr)
    // the mouse is over that circle
}
于 2011-12-07T02:30:07.537 回答