0
嗨我想曲線的線,如在小提琴http://jsfiddle.net/nj37gkgq/給出。線是以座標形式具有源和目的地的鏈接的數組。該行在d3.geo地圖中連接兩個標記。我怎樣才能做到這一點?曲線d3線使用tweendash動畫
<!DOCTYPE html>
<html lang='en'>
<style type="text/css">
<body>
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="//d3js.org/topojson.v1.min.js"></script>
<div id="map"></div>
<script type="text/javascript">
var width = 650,
height = 600;
var projection = d3.geo.albersUsa()
.scale(2500)
.translate([1000, 360]);
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("#map").append("svg")
.attr("width", width)
.attr("height", height);
var coordinates = [
[ -122.762, 40.801 ],
[ -117.0978, 34.1178]
];
d3.json(url, function(ca) {
svg.append("path")
.datum(topojson.mesh(ca, ca.objects.subunits, function(a, b) { return a === b;}))
.attr("d", path);
//for stroke of lines
var gradient = svg.append("svg:defs")
.append("svg:linearGradient")
.attr("id", "gradient")
.attr("x1", "0%")
.attr("y1", "0%")
.attr("x2", "100%")
.attr("y2", "100%")
.attr("spreadMethod", "pad");
gradient.append("svg:stop")
.attr("offset", "0%")
.attr("stop-color","darkblue")
.attr("stop-opacity", 1);
gradient.append("svg:stop")
.attr("offset", "100%")
.attr("stop-color","#85c1e9")
.attr("stop-opacity", 1);
var lF = d3.svg.line()
.interpolate("basis")
.x(function(d){ return d[0] })
.y(function(d){ return d[1] });
//update
var line = svg.append("path")
.datum(coordinates)
.attr("d", function(c){
var d = {
source: projection(c[0]),
target: projection(c[1])
},
points = [];
points.push(d.source);
points.push([(d.target[0] + d.source[0]) * .4, d.target[1]]);
points.push([(d.target[0] + d.source[0]) * .8, d.source[1]]);
points.push(d.target);
console.log(points);
return lF(points);
})
.attr("stroke-width", "2.5")
.attr("stroke-linejoin", "round")
.attr("stroke-linecap", "round")
.style("stroke", "url(#gradient)");
anim();
function anim() {
line.transition()
.duration(2000)
.attrTween("stroke-dasharray", function() {
var len = this.getTotalLength();
return function(t) {
return (d3.interpolateString("0," + len, len + ",0"))(t)
};
})
.each('end', anim);
}
});
</script>
不,我們正站在之前的位置......我認爲如果你能夠提出一個工作小提琴,那麼可能會更好,其他人也可以幫助你 – Cyril
你將如何在兩點之間劃線?沒有一個d3'interpolate'擬合函數會「曲線化」......你只想要一個弧? – Mark