【问题标题】:Raphael JS + Click HandlerRaphael JS + 点击处理程序
【发布时间】:2012-08-18 18:21:56
【问题描述】:

当我点击多维数据集的特定面时,我试图让“3d”多维数据集来监听我的点击,但我不断收到错误消息。

代码:http://jsfiddle.net/qa3P7/1/

在winload函数中,我添加了如下代码:

cube.object[0].click(function(){
    alert('test');
});

但它返回:Object #<Object> has no method 'click'

当我这样做时:cube.object[0],我确实得到了立方体的正确“面”:

cube.object[0]
Object
bl: Array[3]
br: Array[3]
c: "url("img/cube/bianco.jpg")"
clip: 123.18126918267271
id: "face_2"
normal: Array[2]
object: z
shadow: null
tl: Array[3]
tr: Array[3]
__proto__: Object

我对这一切都很陌生,经过数小时的尝试和研究,我陷入了困境。

【问题讨论】:

  • 这是一个由该库创建的名为cube 的对象。但cube.object[0].object 代表一个拉斐尔元素,但我无法让它工作。 console.log(cube.object[0].object) 总是返回 null,我不知道为什么。当我只记录cube 并在开发人员控制台中单击对象时,我会看到所有方法和属性。很奇怪……
  • @DanLee 这正是我尝试时会发生的情况。通过单击 chrome 控制台选择cube.object[0].object 时,我可以看到所有方法和内容,但是在编写console.log(cube.object[0].object) 时它总是返回null。我不知道为什么:(
  • 你考虑过使用 Three.js 吗?

标签: javascript canvas svg click raphael


【解决方案1】:

这是有问题的,因为立方体的每个可见面都在每一帧上重新绘制(参见drawFrame),而.click() 是拉斐尔路径的一种方法,在本例中称为face.object。您可以尝试在每次重绘面部时重新分配点击处理程序,但我认为更好的方法是捕捉画布级别上的点击并手动识别光标下的面部。

【讨论】:

  • 我使用getImageData 或多或少做了同样的事情来识别当前光标下的像素颜色,而不是将颜色链接到特定的一侧,但是当使用图像时,而不是纯色对于每一方来说,事情都变得复杂了。
  • 我不认为这在数学上太难,因为你知道立方体在任何时间点的精确变换,甚至它可见面的坐标(因为它们是在drawQuad 中计算的) )。
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 2016-04-20
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
相关资源
最近更新 更多