s_d*_*dev 5 javascript svg d3.js
我使用 d3.js 缩放功能来放大 svg 内的图像。我使用遮罩来显示下面的底层图像。如果我不缩放蒙版和鼠标光标坐标完美匹配。但是,当我开始缩放时,鼠标坐标不会转换为缩放级别,因此地图显示不再与光标对齐。
这是我到目前为止使用的...我假设缩放时需要某种坐标转换?
var lightMap = d3.select("#lightMap").call(d3.behavior.zoom().scaleExtent([1, 3]).on("zoom", zoom));
var darkMap = d3.select("#darkMap").call(d3.behavior.zoom().scaleExtent([1, 3]).on("zoom", zoom));
function zoom() {
lightMap.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
darkMap.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}
var svg = d3.select("svg");
svg.on('mousemove', function () {
var coordinates = [0, 0];
coordinates = d3.mouse(this);
var x = coordinates[0];
var y = coordinates[1];
primaryCircle.setAttribute("cy", y + 'px');
primaryCircle.setAttribute("cx", x + 'px');
Run Code Online (Sandbox Code Playgroud)
});
小智 4
(我知道这是一个迟到的答案,但我也遇到了同样的问题,我想我会为未来看到这个问题的人分享我如何修复它)
修复:使用coordinates=mouse(lightMap.node())
/darkMap.node()
代替mouse(this)
。或者,可能更正确的是,调用缩放行为svg
并继续使用mouse(this)
.
说明:您在 上调用 mousemove 函数svg
,因此mouse(this)
获取元素内的坐标svg
。但是,您没有将缩放行为应用于svg
,因此您会得到错误的坐标。调用mouse(_)
可缩放的元素。
归档时间: |
|
查看次数: |
2898 次 |
最近记录: |