Raphael设置接受事件处理程序吗?

时间:2013-01-25 11:59:34

标签: raphael

Raphael设置接受事件处理程序吗?当我在raphael集上设置一个事件处理程序时,似乎它被分配在集合中的每个Raphael形状而不是集合本身,如果你试图点击该集合,你可以在这里看到:

http://jsbin.com/aponen/3/edit

我对各种黑客行为不感兴趣,例如通过自定义属性或类似方法将集合内的元素链接到集合中。

由于

1 个答案:

答案 0 :(得分:2)

是的,事件处理程序单独应用于每个对象 - Raphael没有使用SVG的<g>元素。但是,您可以通过几次击键来解决您的问题:

set.push(rect);
set.push(circle);
set.attr({'fill': 'yellow'});
set.click(function(evt) {
    //old
    this.attr({'fill': 'red'});
    //new
    set.attr({'fill': 'red'});
});

它的工作方式和你认为它可能起作用的方式的最大区别在于处理程序中“this”的含义。将其更改为“设置”将解决该问题。

更新,2013年1月26日 根据评论,您还可以使用Raphael's "data" method将该集合附加到集合的子集中,使用{{3}}:

set.push(rect);
set.push(circle);

set.data('myset', set);

set.attr({'fill': 'yellow'});
set.click(function(evt) {
  this.data('myset').attr({'fill': 'red'});
});

我不相信有一种本地方式可以从儿童那里访问该套装,但我可能会错过它。