D3.js动画线条绘制按预期以相反的方向进行
d3.js animate line drawing happens in opposite direction as expected
我在 d3 中有一个简单的折线图.js我希望对线条的绘制进行动画处理。 小提琴:这里。 动画方面有效,但我希望从左到右画线,而不是像小提琴中那样从右到左画线。 为什么从头到尾画线而不是副
线/*canvas setup*/
var margin = {top: 20, right: 20, bottom: 70, left: 100},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var svg = d3.select("body").append("svg").attr("id","chart")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("class","container")
.attr("transform",translate(margin.left,margin.bottom));
function translate(a,b){
return "translate(" + a + "," + b + ")";
}
/*data*/
var data = [{
"time": "2013-03-12 15:09:04",
"value": "5"
}, {
"time": "2013-03-12 14:59:06",
"value": "65"
}, {
"time": "2013-03-12 14:49:04",
"value": "15"
}, {
"time": "2013-03-12 14:39:06",
"value": "25"
},{
"time": "2013-03-12 14:29:03",
"value": "5"
}];
/*end data*/
var parseDate = d3.time.format("%Y-%m-%d %H:%M:%S").parse;
data.forEach(function(d) {
d.time = parseDate(d.time);
d.value = +d.value;
});
//create scales
var xScale = d3.time.scale()
.range([0,width])
.domain(d3.extent(data,function(d){ return d.time})),
yScale = d3.scale.linear()
.range([height,0])
.domain([0,d3.max(data,function(d){ return +d.value})]);
//create axes
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom")
.tickFormat(d3.time.format("%H:%m"));
//create line
var line = d3.svg.line()
.x(function(d){return xScale(d.time)})
.y(function(d){ return yScale(d.value)});
var _line; //path that will be appended to the chart
var yAxis = d3.svg.axis()
.scale(yScale)
.orient("left");
var _x = svg.append("g")
.attr("class","xAxis")
.attr("transform",translate(0,height))
.call(xAxis);
var _y = svg.append("g")
.attr("class","yAxis")
.call(yAxis);
//draw line
function drawLine(){
_line = svg.append("path")
.attr("d", line(data))
.attr("stroke", "steelblue")
.attr("stroke-width", "2")
.attr("fill", "none");
var totalLength = _line.node().getTotalLength();
_line.attr("stroke-dasharray", totalLength + " " + totalLength)
.attr("stroke-dashoffset", totalLength)
.transition()
.duration(750)
.ease("swing")
.attr("stroke-dashoffset", 0);
}
setTimeout(function(){
drawLine();
},500)
线条从右侧进行动画处理,因为您从 totalLength
到 0 的偏移量进行动画处理。因此,动画起点为:线从末尾开始,动画结束是线从实际开头开始。你只需要扭转这个逻辑,让它通过设置负偏移开始.attr("stroke-dashoffset", -totalLength)
我用这个小改动更新了你的小提琴。
相关文章:
- 方向感知三维立方体动画
- “L”方向的脚本动画
- 使用 JavaScript 触发 CSS 动画淡入和淡出 - 仅适用于一个方向
- 根据键盘 threejs 更改对象旋转动画方向
- 将方向作为变量传递给 jquery 动画函数
- JavaScript动画,IMG在屏幕上移动,每次触摸屏幕限制时,他们都会转向方向
- 动画方向箭头“围绕我”样式使用ngCordova
- 在动画过程中更改方向(使用原版JS动画)
- jQuery 切换带有方向和动画的类
- jQuery将问题动画化-动态选择方向
- 禁用phonegap中的方向更改动画
- 如何动画图像&从右到左改变方向
- JQuery图像旋转动画,工作在一个方向,而不是另一个
- 相同的动画在不同的方向上花费的时间更长
- 用动画方向改变图像
- jQuery改变方向的CSS关键帧动画中途
- 如何在jQuery中反转高度动画方向
- 动画在方向上升之前执行
- 如何检测移动Safari全局方向旋转动画
- 谷歌地图API自定义标记动画和方向沿着路径