d3.行为缩放鼠标滚轮缩放中心的动态偏移
d3.behavior.zoom dynamic offset of mousewheel zoom center
有人知道如何动态修改d3.behaviorZoom的中心属性,以便将鼠标滚轮缩放到与鼠标位置偏移指定x和y值的点吗?
缩放应该仍然像往常一样跟踪鼠标位置,但会被动态生成的值偏移。
我正在使用一个名为webcola的库处理节点树图中的多个坐标空间,该库扩展了d3。为了在平移/缩放之外实现平滑的节点拖动,我缓冲了平移坐标,并在节点拖动后合并它们。(而不是使用未在cola中实现的stopPropagation()方法)。
网络拖动+平移修复是可行的,但会偏移d3.behaviorZoom中心。现在,我想将鼠标滚轮上的缩放目标偏移指定的x和y,以恢复鼠标滚轮缩放上的正确光标跟踪。
例如,如果鼠标位于位置100100,但坐标空间移动了50,50,则鼠标滚轮应缩放到150150,而不是实际的鼠标位置100100。
该偏移目标应在节点平移/拖动时动态更新。
function zoomCoords() {
// generate the zoom coords based on the merged coordinate space - doesn't work
console.log("d3.mouse");
console.log(d3.mouse);
return [0,0];
}
var zoom = d3.behavior.zoom()
.scaleExtent([0.2, 3])
// .center(zoomCoords()) // set dynamically ???
.on("zoom", zoomed);
svg.call(zoom);
function zoomed() {
if (enablePanning === true) {
// we're dragging on the background, not a node.
// zoom.center=newCoords; // doesn't work
// zoom.center(newCoords); // doesn't work
newCoords=[(d3.event.translate[0]-translateBuffer[0]),(d3.event.translate[1]-translateBuffer[1])];
container.attr("transform", "translate(" + newCoords + ")scale(" + d3.event.scale + ")");
} else {
// dragging on a node. save the translation to apply to the next container drag
translateBuffer[0]=(d3.event.translate[0]-newCoords[0]);
translateBuffer[1]=(d3.event.translate[1]-newCoords[1]);
}
}
感谢
我能够在不修改d3源的情况下解决这个问题,方法是在mousemove上使用每个节点拖动事件的缓冲平移偏移值设置zoom.center。
function mouseMove() {
m = d3.mouse(this);
// apply the translate buffer so mousewheel zooms on the correct point after dragging the graph
pt=[ m[0]+translateBuffer[0], m[1]+translateBuffer[1] ];
zoom.center(pt);
}
var zoom = d3.behavior.zoom()
.scaleExtent([0.2, 3])
.on("zoom", zoomed);
svg.call(zoom)
.on('mousemove', mouseMove);
相关文章:
- 动态设置谷歌地图缩放
- 如何动态缩放 pdf 图像
- 如何在OpenLayers中的Heatmap.js中动态调整缩放
- 谷歌地图Api v3,使用地方库时的动态缩放级别
- 在交互式图表中动态缩放数据,其中数据会发生变化
- 显示图形点的平均值,随着用户缩放而动态修正
- 浮标:缩放动态图
- 使用缩放级别动态更改谷歌地图上的圆半径
- 使用 CSS 转换或 javascript 来缩放元素以动态适应其父元素
- 图表与动态图:数据采样取决于缩放
- 如何在只使用像素的特定Javascript中动态缩放元素
- 如何在初始化期间在Google Maps API上动态设置缩放值
- HighCharts动态更改缩放选择MarkerFill颜色
- d3.行为缩放鼠标滚轮缩放中心的动态偏移
- 如何动态缩放非常大的图像
- 在AMMAP中动态设置和缩放国家地图
- 如何防止动态maplayer在每次缩放或平移地图时刷新?
- 根据图表上的每个系列的缩放级别动态地向高图添加平均值
- 如何使用css和js来确保动态文本的缩放和向上滑动
- 缩放时对一对图表进行动态更新