3

我试图理解 attrTween。我知道进行这个方格移动的简单方法就是使用 attr,但该示例的目的是让我了解 attrTween。下面的例子没有做任何事情,但是控制台中也没有出现js错误,所以我不确定我哪里出错了。

var svg = d3.select("svg")
var pi = Math.PI;

var mySquare=svg.append("rect")
  .attr("x",60)
  .attr("y",60)
  .attr("width",200)
  .attr("height",200);

mySquare.transition()
  .duration(2000)
  .attrTween("x", d3.interpolate(60,400))

这是该示例的实时编码链接:http: //livecoding.io/5037197

4

1 回答 1

13

来自API:“补间的返回值[强调添加]必须是一个插值器:一个函数......”

这是一种方法,具有内联函数。

http://jsfiddle.net/TsMgJ/2/

mySquare.transition()
  .duration(2000)
  .delay(500)
  .attrTween("x", function (d, i, a) { 
       console.log(a); // returns 60, the value of "x" at the start
       return d3.interpolate(a, 400); 
  });

这是另一种方法,其功能位于链接之外。

http://jsfiddle.net/tz5KT/1/

mySquare.transition()
  .duration(2000)
  .delay(500)
  .attrTween("x", myTweenFunction ); 

function myTweenFunction(d, i, a) {
  console.log( a ); // returns 60, the current value (value at start)
  return d3.interpolate(a, 400);
}
于 2013-02-26T13:25:21.017 回答