8

如何将鼠标悬停或任何与此相关的事件绑定到画布上的绘制对象?例如,我试过这个:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();

//STEP ONE
var stepOneRec = ctx.rect(20, 60, 266, 50);
ctx.stroke();
stepOneRec.addEventListener("mouseover", function() { alert('it works!'); });

在一个站点上,我查看了一个使用 Kinetic.js 的方法。如果这是唯一的方法,我会使用它,我只是假设有一种方法可以将事件绑定到绘制的元素而无需额外的插件。对不起帆布菜鸟。我在这里修改了我的代码:http: //jsfiddle.net/jyBSZ/2/

4

3 回答 3

7

(我从发表评论开始,然后意识到这是一个实际的答案。)

不幸的是,在它自己的javascript中,你不能。没有画布对象,只有整个画布,以及您在其上下文中绘制的任何内容。像动力学这样的插件可以为您制作对象,但画布的全部意义在于浏览器可以将其视为单个静态图像。

如果你愿意,你可以将 mousemove 事件绑定到画布,跟踪它的位置和你绘制东西的位置,并自行暗示它在“那个对象”上(实际上是插件所做的),但这都是 mousemove 事件在单个画布上,而不是在其组件上的 mouseover 事件。(您甚至可以让您的事件绑定模拟“对象”的鼠标悬停事件,但在下面,它仍然基于检查移动和检查您自己的对象设置。)

于 2013-09-27T16:09:47.667 回答
3

在画布元素中绘制的对象不是 HTML 元素,只是像素,因此不会像 HTML 元素那样抛出 DOM 事件。

您需要自己跟踪对象的位置并处理画布onmousemove事件,以确定鼠标何时位于您绘制的对象之一上。

于 2013-09-27T16:10:22.623 回答
2

你可以使用jCanvas,看看这里

我为您的问题制作了一个jsfiddle示例。

只需修改下一个回调以获得所需的结果

 function mouseOut(layer){
$("#mouse-over-text").html('none options selected');
}

function mouseIn(layer){
$("#mouse-over-text").html(getTextForId(layer.name));
}
于 2013-09-27T18:36:55.157 回答