2016-09-13 15 views
4

次のコードは、データからパスを生成します。d3.jsにパスを定義しましたが、正しく描画されますが、.getTotalLength()は未定義です

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

データによって定義された曲がりくねったパスが正しく描画されます。

var totalLength = path.getTotalLength(); 

さらにgetPointAlongLength()が定義されていない次のいずれか:

var point = path.getPointAtLength(position); 

答えて

3

の代わりに:

var totalLength = path.getTotalLength(); 

それがなければならない

はここgetTotalLengthを()定義されていない失敗します:

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

getTotalLength()はノードで動作しますが、pathはノードの配列であり、ノード自体ではありません。したがって、path.node()またはpath[0][0]を使用する必要があります。

+0

実際にどのバージョンが使用されているかの表示がないため、v3の味を削除した場合、私は完全に同意します。 * 'path'はD3の選択です* v3とv4の両方で十分です。さらに、 'path.node()'は、選択の内部の仕組みを使いこなす必要なしに、ノードを取得するための好ましい方法でした。 – altocumulus

1

はい、正しいオブジェクトを取得するためにpath.node()を使用しなければならないことがわかりました。 d3.jsのドキュメントは非常に読みにくく、例はほとんどありません。

関連する問題