RaphaelJS:如果从页面哈希中找到,则更改变量属性

时间:2011-08-22 09:50:00

标签: javascript hash raphael

说我有var mycircle = paper.circle(0, 0, 20).attr({stroke: "#ff0000"});

现在默认情况下,当有人在www.url.com/index.html访问我的页面时,他们会获得红色笔划的圆圈。

然而,如果我想要的话 如果在浏览时定义了#hash,则圈子笔划将改变,例如 做出选择,你想把它链接到某人。说一个人 现在浏览www.url.com/index.html#mycircle

使用:var hash = window.location.hash.substr(1)我可以使变量hash返回“mycircle”。

然而,通过做 hash.attr({stroke: "#0000ff"});笔触颜色不会变为蓝色!有没有办法解决这个问题,所以我可以像这样更改圆圈的笔划?

//编辑

我已经设置了我的圈子:

var name1 = paper.circle(....);
name1.node.id = "name1";
name1.node.name = "Name";

var name2 = paper.circle(....);
name2.node.id = "name2";
name2.node.name = "Another Name";

等等。然后我将它们组合成一组:

nodes = paper.set();
nodes.push(name1, name2, name3, name4....);

然后我使用nodes.hover(function() { });nodes.click(function() { });来定义操作。 name.node.id用于将正确的信息页面加载到div中,而name.node.name出现在节点上方,当用户将鼠标悬停在节点上时。

我尝试按照建议重新组织我的节点:

var mapObjects = {};

mapObjects['name1'] = paper.circle(....);
mapObjects['name1'].node.id = "name1";
mapObjects['name1'].node.name = "Name";

mapObjects['name2'] = paper.circle(....);
mapObjects['name2'].node.id = "name1";
mapObjects['name2'].node.name = "Another Name";

然后我尝试使用像以前那样的函数,只需将节点更改为mapObjects mapObjects.hover(function() { });,同样单击。这些不再适用了!散列技术起作用,这是向正确方向迈出的一步。如何让我的悬停和点击功能立即运行?

1 个答案:

答案 0 :(得分:1)

eval会有所帮助,但它会非常脆弱。更好的方法是记住关联数组中的圆:

var objects = {};
objects['mycircle'] = paper.circle(0, 0, 20).attr({stroke: "#ff0000"});
objects[hash].attr({stroke: "#0000ff"});