Я рисую динамические диаграммы с d3, некоторые элементы исчезают на мыши. Как я могу сохранить диаграмму в png-файле, как она появляется на мыши. Например, мышь, скрывающая элемент, и «по щелчку» сохраняет диаграмму, скрывающую тот же элемент, что и мышь.Как сохранить чертеж d3 в png-файлах?
Начиная с this code Я добавил функцию щелчка, которая генерирует изображение canvas из png с помощью библиотеки canvg.js.
function mouseclick(d, i) {
var content = document.getElementById('#svg-container').innerHTML;
var canvas = document.getElementById('#svg-canvas');
canvg(canvas, content);
var theImage = canvas.toDataURL('image/png');
document.getElementById('#svg-img').setAttribute('src', theImage);
}
Поскольку функция по щелчку в вызываются после мыши по одному на один и те же элементы, я ожидал, что сформированный образ соответствует одному со скрытыми элементами. Тем не менее, я получаю полный график аккордов без скрытых элементов.
Добавление кода, скрывающего элементы на мыши, не имеет никакого значения: мышь накрывает элементы, но они все еще появляются в сгенерированном изображении PNG.
function mouseover(d, i) {
d3.select("#tooltip")
.style("visibility", "visible")
.html("tooltip")
.style("top", function() { return (d3.event.pageY - 80)+"px"})
.style("left", function() { return (d3.event.pageX - 130)+"px";})
chordPaths.classed("fade", function(p) {
return p.source.index != i && p.target.index != i;
});
}
function mouseclick(d, i) {
chordPaths.classed("fade", function(p) {
return p.source.index != i && p.target.index != i;
});
var content = document.getElementById('svg-container').innerHTML;
var canvas = document.getElementById('svg-canvas');
canvg(canvas, content);
var theImage = canvas.toDataURL('image/png');
document.getElementById('svg-img').setAttribute('src', theImage);
}
Выполнение того же кода, что и у обработчика 'mouseover' при сохранении. –
Действительно, это были мои мысли. Однако он не дает ожидаемых результатов. Позвольте мне изменить мой пост ниже с помощью некоторого кода. – Pierre
Классы CSS могут работать не так, как ожидалось; обычно лучше устанавливать атрибуты напрямую. –