我正在编写一段代码,从MySQL数据库获取SVG路径,并使用raphaeljs.com的脚本绘制形状。我在使用onmouseover属性时遇到问题:我希望每个形状在我悬停它们时获得不同的填充颜色,但是当我悬停任何形状时,所绘制的最后一个形状是彩色的而不是我我在盘旋。
这是绘制数据中包含的形状的JS函数的代码:
function drawShapes(data,geolevel,transparent){
$.each(data, function(code,shape){
var contour = shape.contour.split(" ");
attributes = {};
attributes["fill"] = (transparent ? "none" : shape.fillcolor);
attributes["fill-opacity"] = "0.75";
attributes["stroke"] = shapeProperties[geolevel]["stroke"];
attributes["stroke-width"] = shapeProperties[geolevel]["stroke-width"];
index = shapeProperties[geolevel]["prefix"] + code;
shapes[index] = drawPath("M " + contour.join(" ") + " z").attr(attributes);
shapes[index].fill = shape.fillcolor;
if (!transparent) {
shapes[index][0].onmouseover = function () {
shapes[index].attr({fill: hoverfill});
};
shapes[index][0].onmouseout = function () {
shapes[index].attr({fill: shapes[index].fill});
};
}
});
}
shapeProperties
是一个全局变量(对象),包含形状的属性,具体取决于它们的类型。
我的onmouseover周围有什么问题吗? 有关信息,我的脚本基于此演示:http://raphaeljs.com/australia.html
提前致谢!
答案 0 :(得分:1)
这一行:
index = shapeProperties[geolevel]["prefix"] + code;
看起来像是在声明一个全局变量,这可能是导致问题的原因。使用var
关键字,使其范围限定为函数。