彼は d3.js を使用していると思います。 https://github.com/mbostock/d3/wiki/Transitionstransition
を参照して、現在の行の位置から現在のマウスカーソルの位置まで行 (および値) を基本的にアニメーション化します。カーソルをすばやく動かすと、行が少し遅れていることがわかります。これは遷移のアニメーション時間です。
http://jsfiddle.net/2N2rt/4/の d3.js でこれを行う方法の簡単な例をまとめました。あまりいじっていなかったので、もっとスムーズにできると思いますが、これはかなり良さそうです。
var line = d3.select('#selection_line'),
page = d3.select('#page_content'),
x = 0;
page.on('mousemove', function() { x = d3.mouse(this)[0]; });
var update = function() {
line.transition()
.duration(5)
.ease('cubic-in-out')
.style('left', x + 'px');
};
setInterval(update, 35);
また、要素は要素svg
よりもはるかにスムーズにアニメーション化される傾向があることに注意してDOM
ください。これが純粋なsvg
例です(http://jsfiddle.net/2N2rt/10/)。
var graph = d3.select('#graph')
.append('svg')
.attr('width', '100%')
.attr('height', 600);
var box = graph.append('rect')
.attr('transform', 'translate(0, 100)')
.attr('width', '100%')
.attr('height', 200)
.attr('class', 'page_content');
var line = graph.append('line')
.attr('transform', 'translate(0, 50)')
.attr({'x1': 0, 'y1' : 0, 'x2': 0, 'y2': 300})
.attr('class', 'selection_line');
var x = 0;
graph.on('mousemove', function () {
x = d3.mouse(this)[0];
});
var draw = function () {
line
.transition()
.duration(18)
.attrTween('transform', d3.tween('translate(' + x + ', 50)', d3.interpolateString))
.each('end', draw);
};
draw();
繰り返しますが、これは簡単な例ですが、いくつかのアイデアを得ることができれば幸いです。