D3如何在启用平移/缩放的情况下居中元素
D3 how do you center an element with pan/zoom enabled?
我当前更新的解决方案…
var myZoom = d3.behavior.zoom()
.scaleExtent([.3, 10])
.on("zoom", zoom);
var container = d3.select("body").append("svg")
.attr("width", 500)
.attr("height", 500)
.style('border', '1px solid black')
.call(myZoom);
var trans1 = 250;
function sneakyTranslate1() {
if(trans1 <= 0) return 0;
trans1 = trans1 - .5;
return trans1;
}
var trans2 = 250;
function sneakyTranslate2() {
if(trans2 <= 0) return 0;
trans2 = trans2 - .5;
return trans2;
}
//I am centering my node here, but if I pan the node it jumps
var svg = container.append("g").attr("transform", "translate(250,250)");
function zoom() { svg.attr("transform", "translate(" +
(d3.event.translate[0]+sneakyTranslate1()) + "," +
(d3.event.translate[1]+sneakyTranslate2()) + ")scale(" + d3.event.scale +
")"); }
为了澄清,我想首先将我的单个节点居中,然后允许平移和缩放作为默认值。当用户添加更多节点时,他们可能会担心居中和平移问题。
我当前的解决方案是将我的组转换到我的节点所在的位置。将平移后的偏移量添加到缩放函数中的缩放矢量中,并慢慢减小偏移量值,使其恢复为0。
如果有人知道一个更好的方法,或者在你开始绘制之前重置缩放和x,y你的节点,这将是有帮助的。
链接JsFiddle我现在明白你的问题了。我在这里更新了你的jsFiddle。
问题是,即使你正在翻译SVG container
,你没有翻译缩放(有点奇怪,我知道)。本质上,zoom
函数认为您正在尝试放大SVG容器原来是(0,0)的地方,但是因为您将容器移动到其他地方(250,250),您必须移动myZoom
对象,以便它知道从哪里缩放。
如果你看我加了这个
//I am centering my node here, but if I pan the node it jump
var svg = container.append("g").attr("transform", "translate(250,250)");
// translate zoom function so it knows where to zoom from
myZoom.translate([250,250]);
这样它就知道将缩放对象转换到容器所在的位置。我还把这个还原了。
function zoom() {
svg.attr("transform",
"translate(" + d3.event.translate + ")"
+ " scale(" + d3.event.scale + ")");
}
希望这能解决你的问题
相关文章:
- 在不阻止默认行为的情况下检测IE10中的缩放
- 在不移动内部文本的情况下缩放元素的效果
- 如何在“控制缩放”下的“打开图层”上添加一些图像
- “打开街道地图”的长线在高缩放级别下消失
- 如何在不使用滚动条的情况下将html页面放入弹出窗口(对话框)
- 在这种情况下,我如何在jquery中将字符串放入php中
- 调整脚本大小可以向上而不是向下缩放.使用行列式会使它跳跃
- Fullpage.js在横向模式下无法在iOS上正常缩放
- 如何在不丢失比例的情况下缩放背景图像
- 如何实现气泡只有在完全缩放的 d3js 下才能单击
- 如何在不使用dijit的情况下在按钮单击时更改地图缩放级别
- 是否可以在没有JS的情况下将数据放入操作中
- 在不增加滚动条宽度的情况下缩放网页?或指定滚动条宽度
- 如何在启用缩放的情况下使用Highcharts触发模式视图
- 如何在没有抗锯齿的情况下将缩放后的文本作为图像
- JS:如何在没有地址栏和缩放的情况下主持iOS触摸移动游戏
- 如何在不影响图像大小的情况下对响应图像进行中心缩放
- Google maps JS API在不平移地图的情况下缩放鼠标滚轮
- D3如何在启用平移/缩放的情况下居中元素
- 画布网格在不同的缩放级别下会变得模糊