2016-09-13 3 views
4

Der folgende Code generiert einen Pfad aus Daten.Ich habe einen Pfad in d3.js definiert, es zeichnet korrekt, aber .getTotalLength() ist nicht definiert

var path = gameBoard.append('path') 
    .attr("id", "snake" + snakeIndex) 
    .attr("d", interpolator(data)) 
    .attr('stroke-width', snakeStroke) 
    .attr('fill', 'none') 
    .attr('stroke', config.snakeColor); 

Der kurvige Pfad, der von den Daten definiert wird, wird korrekt gezeichnet.

schlägt hier getTotalLength() nicht definiert ist:

var totalLength = path.getTotalLength(); 

Zusätzlich getPointAlongLength() nicht definiert ist entweder:

var point = path.getPointAtLength(position); 

Antwort

3

Statt:

var totalLength = path.getTotalLength(); 

Es muss sein :

var totalLength = path.node().getTotalLength(); 

getTotalLength() funktioniert auf dem Knoten, aber path ist ein Array von Knoten, nicht der Knoten selbst. Sie müssen also path.node() oder path[0][0] verwenden.

+0

Ich stimme Ihnen voll und ganz zu, wenn Sie den v3-Flavor entfernt haben, da es keinen Hinweis darauf gibt, welche Version tatsächlich verwendet wird. * 'path' ist eine D3-Auswahl * sollte sowohl für v3 als auch für v4 ausreichen. Zusätzlich ist und war 'path.node()' die bevorzugte Methode, um den Knoten zu erhalten, ohne mit den inneren Funktionen der Auswahl herumspielen zu müssen. – altocumulus

1

Ja, ich entdeckte, dass ich path.node() verwenden musste, um das richtige Objekt zu erhalten. Die d3.js Dokumentation ist extrem schwer zu lesen, mit wenigen Beispielen.

Verwandte Themen