我遇到了canvg的问题。我无法让它呈现一个右浮动的元素。
我用来在这个 d3 图的右侧浮动元素(svg 元素实际上不支持 css 浮动)的技巧是创建一个 x=100% 的嵌套 svg,然后在子元素上使用负 x 值来移动他们回到可视区域。
正如你在这个小提琴中看到的,canvg 没有渲染 badContainer 的内容。
http://jsfiddle.net/ujdaLfh7/3/
谢谢。
var width = 500;
var height = 500;
var graph = {
"relationshipTypes": [{ "displayName": "Inheritance", "code":"is_a"}],
}
var svg = d3.select("#content").append("svg")
.attr("width", width)
.attr("height", height)
.attr("id","mysvg");
var goodContainer = svg.append("svg")
.attr("x",50)
.attr("y",0)
.attr('width',100)
.attr('height',100)
.style("overflow","visible");
var rect = goodContainer.append("rect")
.attr("width", 50)
.attr("height", 50)
.attr("x", 50)
.attr("y", 50)
.attr("fill","red")
.attr("stroke","#555");
console.log('canvg test');
var badContainer = svg.append("svg")
.attr("class","badContainer")
.attr("x","100%")
.attr("y",150)
.style("overflow","visible");
var legendBg=badContainer
.append('rect')
.attr("fill","cyan")
.attr("stroke","#555")
.attr("width", 150)
.attr("height", 150)
.attr("x",-150)
.attr("y",-150+10);
var $container = $('#content'),
content = $container.html().trim();
console.log(content);
canvas = document.getElementById('mycanvas');
// Draw svg on canvas
canvg(canvas, content);
// Change img be SVG representation
var theImage = canvas.toDataURL('image/png');
$('#myimg').attr('src', theImage);
编辑:
作为该问题的解决方法,我最终使用设置子 svg 的 x 位置的函数以及监视窗口调整大小的 angular.js 指令来定位图例框。
尽管如此,如果有人知道如何让 canvg 绘制位于 svg 区域之外的东西,我会接受你的回答。