我正在使用D3库创建绘图应用程序。
我需要在用户单击的坐标上绘制对象(为了简单起见,使用圆形)。问题是当用户使用平移和缩放功能并移动视口时。 然后对象被放置在错误的位置(我猜测问题是事件坐标相对于svg元素而不是g元素,因此它们在没有正确转换的情况下计算)。
我尝试为g元素添加点击回调函数,但不起作用(我猜它没有任何大小?)。
以下是jsfiddle: https://jsfiddle.net/klinki/53ftaw7r/
我需要在用户单击的坐标上绘制对象(为了简单起见,使用圆形)。问题是当用户使用平移和缩放功能并移动视口时。 然后对象被放置在错误的位置(我猜测问题是事件坐标相对于svg元素而不是g元素,因此它们在没有正确转换的情况下计算)。
$('svg').on('click', function(event) {
d3.select('#content-layer').append('circle')
.attr('r', 10)
.attr('cx', event.offsetX)
.attr('cy', event.offsetY)
.attr('stroke', 'black')
.attr('fill', 'white');
});
var zoomBehavior = d3.behavior.zoom()
.scaleExtent([1, 10])
.on('zoom', () => {
var translate = "translate(" + d3.event.translate + ")";
var scale = "scale(" + d3.event.scale + ")";
d3.select('#content-layer').attr("transform", translate + scale);
});
d3.select('svg').call(zoomBehavior);
我尝试为g元素添加点击回调函数,但不起作用(我猜它没有任何大小?)。
以下是jsfiddle: https://jsfiddle.net/klinki/53ftaw7r/