【发布时间】:2011-10-11 22:40:38
【问题描述】:
我之前曾与 Raphael 合作过,但我回到了我的项目并决定完全重新编写它以提高性能和一般代码质量。无论如何,该应用程序使用 Raphael 创建思维导图(如果您阅读了我之前的问题,您将对整个应用程序有更多的了解)。
所以我使用 paper.circle() 等在画布上创建节点,为了避免使用 .drag() 进行不必要的工作,我决定使用Raphael ZPD plugin。这个插件太复杂了,我无法完全理解,但我打算稍微编辑一下。 我想将活动节点存储在变量 _node 中。 为此,我认为只需获取 evt.target 并分配它,但显然并非如此。
这是插件的一部分(我认为作业应该去的地方):
/**
* Handle mouse button release event.
*/
me.handleMouseUp = function(evt) {
if (evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
if ((me.state == 'pan' && me.opts.pan) || (me.state == 'move' && me.opts.drag)) {
// Quit pan mode
me.state = '';
}
};
当使用alert(evt.target);时(点击圆圈时)我得到:
[对象 SVGCircleElement]
这意味着evt.target 正在获取单个元素(因为它会因其他形状而变化),但随后在分配失败后尝试操作_node。我收到以下错误消息:
_node.attr 不是函数
(我尝试更改 attr(),因为这是最简单的函数)。
我使用 node、evt.target、evt.currentTarget 等尝试了许多变体,但我确定我只是错过了 evt.target 的一些愚蠢的东西,因为它会在警报时产生正确的输出。
我了解me. 在代码中的其他位置定义,因此如果需要,请查看上面的链接(似乎比在此处发布完整插件更好)。
如果您能提供任何帮助,我将不胜感激。
谢谢。
更新:我现在 100% 确定应该将 evt.target 存储在 _node 中,但 SVG、DOM 和 Raphael 之间似乎没有直接联系.关于如何将 SVG 元素链接回 Raphael 的任何想法?
【问题讨论】:
标签: javascript jquery raphael