gpt4 book ai didi

javascript - D3 JS在点击时制作多边形

转载 作者:行者123 更新时间:2023-11-29 21:14:29 25 4
gpt4 key购买 nike

考虑以下代码

var width = 960,
height = 500;

var vertices = d3.range(100).map(function(d) {
return [Math.random() * width, Math.random() * height];
});

var voronoi = d3.geom.voronoi()
.clipExtent([[0, 0], [width, height]]);

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.on("mousemove", function() { vertices[0] = d3.mouse(this); redraw(); });


var path = svg.append("g").selectAll("path");

svg.selectAll("circle")
.data(vertices.slice(1))
.enter().append("circle")
.attr("transform", function(d) { return "translate(" + d + ")"; })
.attr("r", 1.5);

redraw();

function redraw() {
path = path
.data(voronoi(vertices), polygon);

path.exit().remove();

path.enter().append("path")
.attr("class", function(d, i) { return "q" + (i % 9) + "-9"; })
.attr("d", polygon);

path.order();
}

function polygon(d) {
return "M" + d.join("L") + "Z";
}

如何通过单击添加一个新的多边形并同时绘制一个中心点?

最佳答案

你有一个好的开始。除了 svg 上的 mousemove 监听器之外,您还需要一个 click 监听器。有了这个,您可以在每次用户单击时添加一个新顶点。我通过向重绘函数添加一个变量来区分由单击触发的重绘来完成此操作。您也许可以找到一种更简洁的方法来执行此操作,但希望这对您有所帮助!

var width = 960,
height = 500;

var vertices = d3.range(100).map(function(d) {
return [Math.random() * width, Math.random() * height];
});

var voronoi = d3.geom.voronoi()
.clipExtent([[0, 0], [width, height]]);

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.on("mousemove", function() { vertices[0] = d3.mouse(this); redraw(); })
.on('click', function() {
vertices.push(d3.mouse(this));
redraw(true);
});


var path = svg.append("g").selectAll("path");

var circle = svg.selectAll("circle");

redraw();

function redraw(fromClick) {
var data = voronoi(vertices);
path = path
.data(data, polygon);
path.exit().remove();
path.enter().append("path")
.attr("class", function(d, i) { return "q" + (i % 9) + "-9"; })
.attr("d", polygon);
path.order();

circle = circle.data(vertices)
circle.attr("transform", function(d) { return "translate(" + d + ")"; })
circle.enter().append("circle")
.attr("transform", function(d) { return "translate(" + d + ")"; })
.attr("r", 1.5)
.attr('fill', fromClick ? 'white' : '')

circle.exit().remove();

}
function polygon(d) {
return d ? "M" + d.join("L") + "Z" : null;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

关于javascript - D3 JS在点击时制作多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40009014/

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