4

目前我有一个用于绘制形状的小型应用程序。

这是一个包括我的问题的例子:http: //jsfiddle.net/auyaC/

我得到错误:Uncaught TypeError: Object [object Object] has no method 'getBBox'

下面是错误来自的剥离代码

当用户点击一个形状时,我捕捉到了 event.target

var onMouseDown = function(event) {
    setBBoxes($(event.target)); // Seems OK
};

我想要 BBoxes 再次回来,但我的形状失去了 BBox ..

var setBBoxes = function(shape) {
    shape.getBBox(); // Unable.. getBBox is part of Raphael shapes, but mine is not the real reference?
};

还有一个剥离的例子:http: //jsfiddle.net/auyaC/2/

编辑

好的,所以我的问题是混合了 jQuery 和 Raphaeljs,因为我无法使用 Raphael 的鼠标事件。

使用鼠标事件或触摸事件的在线示例似乎都不起作用。

我已阅读这些问题报告

Windows 还认为我有可用于 255 个触摸点的触摸输入。

但我不再有触摸屏了(有一个但更换了屏幕并删除了驱动程序)。

特性

所以对我来说,即使http://jsfiddle.net/5BPXD在我的电脑上也不能工作......

4

2 回答 2

2

您通常不想像这样混合使用 jQuery 和 Raphael,因为很容易混淆您正在使用哪个库的事件处理程序和方法。当您开始直接使用 Raphael 创建的 DOM 元素时,您也会失去 Raphael 对旧浏览器的回退功能。

在这种情况下,我建议将.mousedown()侦听器直接添加到 Raphael 元素。

var paper = new Raphael($(".testarea")[0], $(".testarea").width(), $(".testarea").height());
var circAttr = {
    "fill": "#4ba6e8",
    "stroke": "#1a81cc",
    "stroke-width": "2"
};

paper.circle(200, 200, 80).attr(circAttr).mousedown(function() {
    someFunction(this);
});


var someFunction = function(shape) {
    console.log(shape.getBBox());    
};

更新小提琴:http: //jsfiddle.net/auyaC/3/

当然,您失去了使用选择器一次选择所有形状并将事件一次添加到所有形状的能力。您需要在创建时将 mousedown 事件添加到每个事件中。小的权衡,我想。

于 2013-06-18T14:11:32.710 回答
0

我终于找到了我的错误的修复...

拉斐尔似乎认为我有一个触摸屏。

“平板电脑组件”Windows 功能已打开。禁用此功能后,我可以再次使用鼠标和触摸事件!

打开或关闭 Windows 功能。 要打开某项功能,请选中其复选框。 要关闭某项功能,请清除其复选框。 实心框表示仅打开部分功能。 ... 平板电脑组件

于 2013-06-19T12:09:12.347 回答