Я пытаюсь анимировать линию пути в D3. Я могу заставить работать другие переходы, такие как эффект затухания, но после исследования того, как переходить пути, кажется, что лучший вариант - поиграть с штрихом dasharray, изменив его
var data = {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"properties": {
"name": "Test Drive for data ",
"time": "2018-04-03T01:48:51Z",
"coordTimes": []
},
"geometry": {
"type": "LineString",
"coordinates": [
[10, 10, 10],
[30, 40, 10],
[50, 20, 10],
[70, 100, 10],
[90, 20, 10],
[110, 120, 10],
[130, 100, 10],
[150, 80, 10]
]
}
}]
}
var svg = d3.select("body").append("svg")
.attr("width", 1000)
.attr("height", 1000);
var lineFunction = d3.line()
.x(function(d) {
return d[0]
})
.y(function(d) {
return d[1]
})
.curve(d3.curveBasis);
var totalLength = d3.line(data).length;
var tripLine = svg.append("path")
.datum(data.features[0].geometry.coordinates)
.attr("id", "pathLine")
.style("stroke-dasharray", 0)
.attr("d", lineFunction)
.style("stroke", "#ddd")
.transition()
.duration(2000)
.style("stroke", "red")
.style("stroke-dasharray", totalLength + " " + totalLength)
.attr("stroke-width", 4)
.attr("fill", "none");<script src = "https://d3js.org/d3.v5.min.js"></script>Проблема в том, что D3 чрезвычайно затруднил использование предыдущих примеров из-за обновлений синтаксиса, которые делают невозможным получение общей длины пути.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Здесь есть основная ошибка: d3.line(data).length, который, кстати, совпадает с d3.line().length, вернет 1.
Вам нужен метод getTotalLength, который должен вызываться в Элемент SVG, а не в выборе D3 и тем более в генераторе линий.
Следовательно:
var totalLength = tripLine.node().getTotalLength();
Вот обновленный код:
var data = {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"properties": {
"name": "Test Drive for data ",
"time": "2018-04-03T01:48:51Z",
"coordTimes": []
},
"geometry": {
"type": "LineString",
"coordinates": [
[10, 10, 10],
[30, 40, 10],
[50, 20, 10],
[70, 100, 10],
[90, 20, 10],
[110, 120, 10],
[130, 100, 10],
[150, 80, 10]
]
}
}]
}
var svg = d3.select("body").append("svg")
.attr("width", 1000)
.attr("height", 1000);
var lineFunction = d3.line()
.x(function(d) {
return d[0]
})
.y(function(d) {
return d[1]
})
.curve(d3.curveBasis);
var tripLine = svg.append("path")
.datum(data.features[0].geometry.coordinates)
.attr("id", "pathLine")
.style("stroke-dasharray", 0)
.attr("d", lineFunction)
.style("stroke", "#ddd")
.attr("fill", "none");
var totalLength = tripLine.node().getTotalLength();
tripLine.transition()
.duration(2000)
.style("stroke", "red")
.style("stroke-dasharray", totalLength + " " + totalLength)
.attr("stroke-width", 4);<script src = "https://d3js.org/d3.v5.min.js"></script>