2

这是我的代码,我添加了一系列矩形 - http://jsfiddle.net/nikunj2512/74qrC/6/

我想添加一个像图像滑块一样的滑块,它具有用于导航的左右箭头按钮或类似的东西,以便用户可以浏览矩形框。

我不知道如何实现这个目标。

d3.js是创建矩形框的代码:

var width = 4000,
height = 200,
margin = 2,
nRect = 20,
rectWidth = (width - (nRect - 1) * margin) / nRect,
svg = d3.select('#chart').append('svg')
    .attr('width', width)
    .attr('height', height);

var data = d3.range(nRect),
posScale = d3.scale.linear()
    .domain(d3.extent(data))
    .range([0, width - rectWidth]);

svg.selectAll('rect')
    .data(data)
   .enter()
    .append('rect')
    .attr('x', posScale)
    .attr('width', rectWidth)
    .attr('height', height);
4

1 回答 1

3

这很有趣......所以,我想我在你的另一个问题中建议了这种方法,但基本上我将剪辑路径应用于矩形:

svg.append("defs").append("clipPath")
.attr("id", "clip")
    .append("rect")
        .attr("width", clipWidth)
        .attr("height", clipHeight);

var g = svg.append("g");
g.selectAll("rect").data(data)
    .enter()
    .append('rect')
        .attr("class", "area").attr("clip-path", "url(#clip)")
        .attr('x', xScale)
        .attr('width', rectWidth)
        .attr('height', rectHeight)
        .style('fill', d3.scale.category20());

...然后我向上或向下倾斜域并使用延迟为 500 毫秒的转换更新绘图:

var update = function(){
    g.selectAll("rect")
        .transition().duration(500)
        .attr('x', xScale);
};

d3.select("#left").on("click", function(){ 
    xScale.domain([xScale.domain()[0] - 1, xScale.domain()[1] - 1]);
    update();
});

瞧,一个工作的 jsFiddle:http: //jsfiddle.net/reblace/74qrC/9/

现在,诀窍是在这些框中加载图像,但是您应该能够在谷歌上搜索如何将图像应用于 svg 元素,并且有大量资源可以帮助您做到这一点。

于 2013-09-18T14:12:12.477 回答