#javascript #jquery #raphael #pie-chart
#javascript #jquery #рафаэль #круговая диаграмма
Вопрос:
Я видел, как этот вопрос задавался в группах Raphael Google, но после нескольких часов поиска там, а также здесь и в Google, я, похоже, не могу найти решение.
Я просто хотел бы иметь возможность настраивать таргетинг на фрагменты моей круговой диаграммы (svg path) с помощью jQuery, но я не могу понять, как добавить пользовательские идентификаторы к тегам пути — там по умолчанию нет атрибута ID:
<path fill="#764c29" stroke="none" d="M350,350L350.6911881148345,94.00093308961084A256,256,0,0,1,561.8463375189659,206.2741175716762Z" style="stroke-width: 1; stroke-linejoin: round;" stroke-width="1" stroke-linejoin="round"/>
Идеальным было бы следующее:
<path **id="my_id"** fill="#764c29" stroke="none" d="M350,350L350.6911881148345,94.00093308961084A256,256,0,0,1,561.8463375189659,206.2741175716762Z" style="stroke-width: 1; stroke-linejoin: round;" stroke-width="1" stroke-linejoin="round"/>
У кого-нибудь есть идея, как этого можно достичь?
Это код, который я использую для создания круговой диаграммы:
window.onload = function () {
var r = Raphael("holder");
var pie = r.g.piechart(350, 350, 256, [56, 104, 158, 23, 15, 6]);
pie.hover(function () {
this.sector.stop();
this.sector.animate({scale: [1.1, 1.1, this.cx, this.cy]}, 500, "bounce");
}, function () {
this.sector.animate({scale: [1, 1, this.cx, this.cy]}, 500, "bounce");
});
};
По сути, причина, по которой мне нужно иметь возможность это делать, заключается в том, что я могу создать несколько отдельных триггеров привязки для выполнения масштабных анимаций, показанных выше.
Любая помощь приветствуется.
Ответ №1:
объект piechart предоставляет 3 способа доступа к их секторам.
1) каждая функция
pie.each(function(sector, cover, i) {
sector.attr({/*...*/}); //raphael
$(sector.node).foo(); //jquery
});
2) объект серии (для стилизации и преобразования)
var i = 0; // 0 = 56, 1 = 104, 2 = 158 …
//raphael way to hide the first sector
pie.series.items[i].attr({ opacity : 0 });
//jquery way to hide the first sector
$(pie.series.items[i].node).hide();
при этом i является индексом вашего массива данных
демонстрация:http://jsbin.com/eriqa5/2/edit
3) покрывает объект (для событий мыши и касания)
//raphael way to hover the first sector
pie.covers.items[0].hover(...);
//jquery way to hover the first sector
$(pie.covers.items[0].node).hover(...);
демонстрация:http://jsbin.com/eriqa5/4/edit
Комментарии:
1. Большое спасибо за объяснение. Одна вещь, на которой я все еще застрял: использование jQuery hover, похоже, не работает для узла:
$(pie.series.items[0].node).hover(function () { $('#test').hide(); });
2. Джейми, я обновил свой ответ. для событий следует использовать covers-object. пожалуйста, проверьте демо jsbin.com/eriqa5/4/edit
3. Гениально, я застрял на этом целую вечность
4. Одна вещь, которую я заметил, это то, что по какой-то причине индекс элемента [i] не всегда представлял индекс переданного массива. Вместо этого мне пришлось перебирать и проверять каждый элемент [i].значение. чтобы определить правильный. На всякий случай, если у кого-то еще возникнут проблемы с этим. Возможно, новая версия?