Есть ли у кого-нибудь опыт работы с библиотекой SVG Raphael.js?
Я использую Raphael.js для создания карты SVG (для использования на смартфонах), но у меня возникают проблемы с открытием объектов карты, которые создает Рафаэль, для внешнего взаимодействия с помощью jQuery и стилизации с помощью css.
var R = Array();
R[1] = new Raphael("level1", 408, 286);
R[2] = new Raphael("level2", 408, 286);
R[3] = new Raphael("level3", 408, 286);
R[4] = new Raphael("level4", 408, 286);
R[5] = new Raphael("level5", 408, 286);
var attr = {
fill: "#ccc",
stroke: "#000",
"stroke-width": 0.5,
"stroke-linecap": "square",
"stroke-linejoin": "miter"
};
// loop through a bunch of objects (not shown for brevity)
// in the end, I end up with a couple hundred objects drawn by Raphael
var o = R[fID].path(coordstring).attr(attr);
// creates an #o[ID] id value that jQuery can target
o.node.id = "o"+$(this).attr('id'); // id value comes from data source
o.click(function(){
highlightMapObject(this.node.id.substr(1));
);
// end loop
// accessed from the o.click and from outside in jQuery
function highlightMapObject(oid){
var $target = $("#o"+oid);
$target.addClass('highlight');
}
Проблема, с которой я, кажется, сталкиваюсь, заключается в том, что попытка добавить класс к объекту Raphael не работает, или, если она работает, атрибуты CSS этого класса (например, измененные цвета фона и т. д.) не применяются.
Итак, если мой класс .highlight:
.highlight { background-color: #f00; }
Это либо не применяется, либо не перезаписывает fill:"ccc"
из исходных атрибутов Raphael. Я предполагаю, что поскольку идентификатор, на который нацелен jQuery, находится в объекте Raphael NODE, а не в самом объекте, это, вероятно, часть проблемы.
Я видел много советов вообще избегать узла при работе с Raphael, но, похоже, это единственный способ открыть объект Raphael для внешнего таргетинга (в данном случае через jQuery).
Мне не нужно использовать CSS для достижения изменения стиля этих объектов, но я должен иметь возможность добиться этого изменения извне (через jQuery - в ответ на внешние запросы выделения и т. д.) скорее чем все внутренне (через Raphael и только в ответ на клики объекта).
Идеи?
Спасибо!