Raphael JS:如何删除事件?

6
我使用 Raphael .mouseover() 和 .mouseout() 事件来突出显示 SVG 中的一些元素。这很好用,但是在我单击一个元素之后,我希望它停止突出显示。
Raphael 文档 中,我找到了以下内容:

要解除绑定事件,请使用相同的方法名称和“un”前缀,即 element.unclick(f);

但是我无法让它起作用,而且我也不理解 'f' 参数的含义。
这个方法不起作用,但是有什么方法可以呢?
obj.click( function() {
  this.unmouseover();
});

带着40个问题,我希望超过57%的问题都有适当的答案可以标记为正确。 :) - Jared Farrish
2
不,文档说你可以使用“un”来解除绑定这些事件...但它不起作用,或者我做错了什么...我会再次检查我的问题以选择好的答案,但大多数问题还没有完全回答,我想.... - Dylan
如果你有一堆问题,它们都有答案,但没有一个是“正确”的,那么你可能需要重新考虑如何提问,是否清晰明了,以及它们是否过于局限而无法成功回答。 :) - Jared Farrish
另外,如果您提供您的问题的 http://fiddle.net,那可能会有所帮助。 - Jared Farrish
4
我认为我遇到了一些难以容忍的困难问题,而其他人则把它们当作正常的烦恼... 我不会接受“就这样生活”作为一个好答案... 看看我的未标记的问题,那里没有真正的答案... 而且我认为,即使英语不是我的母语,我的提问方式也没有太大问题... - Dylan
显示剩余4条评论
1个回答

5

好的,你需要将处理程序函数传递给unmouseover请求:

// Creates canvas 320 × 200 at 10, 50
var paper = Raphael(10, 50, 320, 200);
// Creates circle at x = 50, y = 40, with radius 10
var circle = paper.circle(50, 40, 10);
// Sets the fill attribute of the circle to red (#f00)
circle.attr("fill", "#f00");
// Sets the stroke attribute of the circle to white
circle.attr("stroke", "#fff");

var mouseover = function (event) {
    this.attr({fill: "yellow"});
}
var mouseout = function (event) {
    this.attr({fill: "red"});
}

circle.hover(mouseover, mouseout);
circle.click(function (event) {
    this.attr({fill: "blue"});
    this.unmouseover(mouseover);
    this.unmouseout(mouseout);
});

http://jsfiddle.net/GexHj/1/

这就是关于f的内容。你也可以使用unhover()

circle.click(function (event) {
    this.attr({fill: "blue"});
    this.unhover(mouseover, mouseout);
});

http://jsfiddle.net/GexHj/2/


太好了,非常感谢!现在我甚至已经用对象数组使其工作了,我使用mouseout事件作为每个对象的“属性”... - Dylan
关于这个旧答案的问题:调用“this.unmouseout(mouseout);”似乎依赖于您最初绑定的函数名称为“mouseout”,对吗?所以我可以称之为“myFunc”,然后用“unmyFunc”取消绑定,对吗?但是对于任何代码缩小来说,这似乎都很可怕,不是吗?根本没有保证如果“myFunc”被缩小为“xy”,那么“unmyFunc”将被缩小为“unxy”。我错过了什么吗? - Sam Fen
“mouseout”实际上是一个函数的引用,而不是一个字符串值。理论上,由于在Javascript中通过引用传递函数是正常行为的一部分,因此激进的代码压缩应该识别和替换函数引用以及函数标识符标签的声明。我的回答没有经过任何测试,你不应该有问题。如果你发现了一个具体的测试和一个具体的代码压缩器,请告诉我。 - Jared Farrish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接