2013-09-26 40 views

Odpowiedz

7

Tak, istnieje kilka sposobów użycia obrazów w SVG. Prawdopodobnie chcesz zdefiniować obraz jako wzór, a następnie użyć go do wypełnienia prostokąta. Aby uzyskać więcej informacji, zobacz np. this question (procedura jest taka sama, niezależnie od elementu, który chcesz wypełnić).

W kodzie D3 wyglądałoby to tak (uproszczone).

svg.append("defs") 
    .append("pattern") 
    .attr("id", "bg") 
    .append("image") 
    .attr("xlink:href", "image.jpg"); 

svg.append("rect") 
    .attr("fill", "url(#bg)"); 
5

Ważne, aby pamiętać, że obraz musi mieć szerokość, wysokość atrybuty

chart.append("defs") 
        .append('pattern') 
        .attr('id', 'locked2') 
        .attr('patternUnits', 'userSpaceOnUse') 
        .attr('width', 4) 
        .attr('height', 4) 
        .append("image") 
        .attr("xlink:href", "locked.png") 
        .attr('width', 4) 
        .attr('height', 4); 
+1

właśnie stworzył [skrzypce ] (http://jsfiddle.net/headwinds/6eu0xnvt/#base) do testowania i działa dobrze! – headwinds

+0

skrzypce niedostępne. 404 error – Nidheesh

+3

[tutaj jest działające skrzypce] (https://jsfiddle.net/dnc042/fd7svrx6/7/) –

2

Stosując wzory dodać zdjęcie w prostokącie można dokonać wizualizacji dość powolna.

można zrobić coś takiego, że zamiast tego, jest to kod użyłem do moich węzłów prostokątne w układzie sił, chciałem umieścić prostokąty wypełnione przez obraz jako węzły:

var node = svg.selectAll(".node") 
    .data(force.nodes()) 
    .enter().append("g") 
    .attr("class", "node"); 

node.append("rect") 
    .attr("width", 80) 
    .attr("height", 120) 
    .attr("fill", 'none') 
    .attr("stroke", function (d) { 
     return colors(d.importance); 
    }); 

node.append("image") 
    .attr("xlink:href", function (d) { return d.cover;}) 
    .attr("x", 2) 
    .attr("width", 76) 
    .attr("height", 120) 
    .on('dblclick', showInfo);