gpt4 book ai didi

javascript - d3.js:限制画笔的大小

转载 作者:数据小太阳 更新时间:2023-10-29 05:19:40 26 4
gpt4 key购买 nike

有没有办法限制画笔的大小,即使范围更大?

我整理了一个只有 x 比例尺的画笔,可以移动和调整大小。我希望能够限制用户可以调整大小的范围(基本上只能达到某个点)。

在下面的示例中,当画笔大于最大范围的一半时,画笔函数将停止更新。但是,刷子本身仍然可以扩展。有没有办法防止这种情况发生?或者有更好的方法来处理这个问题吗?

非常感谢!

在此处查看此代码:http://bl.ocks.org/3691274 (编辑:此演示现在有效)

bar = function(range) {

var x_range = d3.scale.linear()
.domain([0, range.length])
.range([0, width]);

svg.selectAll("rect.items").remove();

svg.selectAll("rect.items")
.data(range)
.enter().append("svg:rect")
.attr("class", "items")
.attr("x", function(d, i) {return x_range(i);})
.attr("y", 0)
.attr("width", width/range.length-2)
.attr("height", 100)
.attr("fill", function(d) {return d})
.attr("title", function(d) {return d});
}

var start = 21;
bar(data.slice(0, start), true);

var control_x_range = d3.scale.linear()
.domain([0, data.length])
.range([0, width]);

controlBar = svg.selectAll("rect.itemsControl")
.data(data)
.enter().append("svg:rect")
.attr("class", "itemsControl")
.attr("x", function(d, i) {return control_x_range(i);})
.attr("y", 110)
.attr("width", width/data.length-2)
.attr("height", 20)
.attr("fill", function(d) {return d});

svg.append("g")
.attr("class", "brush")
.call(d3.svg.brush().x(d3.scale.linear().range([0, width]))
.extent([0,1*start/data.length])
.on("brush", brush))
.selectAll("rect")
.attr("y", 110)
.attr("height", 20);

function brush() {
var s = d3.event.target.extent();

if (s[1]-s[0] < 0.5) {
var start = Math.round((data.length-1)*s[0]);
var end = Math.round((data.length-1)*s[1]);

bar(data.slice(start,end));
};

}

最佳答案

我最终通过在超出大小时将画笔重新绘制到其最大允许大小来解决这个问题:

function brush() {
var s = d3.event.target.extent();
if (s[1]-s[0] < 0.5) {
var start = Math.round((data.length-1)*s[0]);
var end = Math.round((data.length-1)*s[1]);

bar(data.slice(start,end));
}
else {d3.event.target.extent([s[0],s[0]+0.5]); d3.event.target(d3.select(this));}
}

演示:http://bl.ocks.org/3691274

我仍然有兴趣阅读更好的解决方案。

关于javascript - d3.js:限制画笔的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12354729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com