Ich habe eine D3 v4 Kraftsimulation mit 100 Knoten darin. Jeder Knoten ist ein Bild und ich möchte jedem Bild einen Schlagschatten hinzufügen, aber ich denke, aufgrund der Art und Weise, wie ich den Schlagschatten rendere, skaliert dies nicht. Mit 100 Bildern ohne Schlagschatten läuft es 60fps, aber mit Schlagschatten eher wie 8fps. Gibt es eine Hacky-Lösung oder einen besseren Weg, dies zu tun? Hier ist, was ich jetzt haben (Rendering auf einem Kreis hinter dem Bild):Schlagschatten zu vielen D3-Kraftsimulationsknoten hinzufügen?
var dropShadowFilter = this.d3Graph.append('svg:filter')
.attr('id', 'drop-shadow')
.attr('filterUnits', "userSpaceOnUse")
.attr('width', '250%')
.attr('height', '250%');
dropShadowFilter.append('svg:feGaussianBlur')
.attr('in', 'SourceGraphic')
.attr('stdDeviation', 2)
.attr('result', 'blur-out');
dropShadowFilter.append('svg:feColorMatrix')
.attr('in', 'blur-out')
.attr('type', 'hueRotate')
.attr('values', 180)
.attr('result', 'color-out');
dropShadowFilter.append('svg:feOffset')
.attr('in', 'color-out')
.attr('dx', 3)
.attr('dy', 3)
.attr('result', 'the-shadow');
dropShadowFilter.append('svg:feBlend')
.attr('in', 'SourceGraphic')
.attr('in2', 'the-shadow')
.attr('mode', 'normal');
this.node = this.d3Graph.selectAll(null)
.data(Nodes)
.enter()
.append("g")
.attr("class", "nodes");
this.node.append("circle")
.attr("r", 30)
.attr("fill", "red")
.style("filter", "url(#drop-shadow)")
wenn jeder Knoten ein Bild zu ihnen angehängt hat, könnten Sie für jedes Bild einen Fallschatteneffekt in einem Fotobearbeitungsprogramm erstellen, anstatt svg Filter verwenden –
Dies fiel mir jedoch leider, das glaube ich nicht. Der Schatten würde am Ende die anderen Knoten überlappen, wenn sie nahe beieinander sind, was nicht richtig aussehen würde. – PurplePanda