我正在尝试在d3.js中创建一些自定义缩放功能。目前,缩放是在单击时触发的,并且会放大到只关注单击的区域。
目前,我的代码有一个function zoom(d)
,它可以做它需要做的事情。还有一个位于zoom()内部的var zoomTransition
,它负责大部分功能。不幸的是,我无法共享我的大部分代码。
缩放还需要在鼠标滚动上进行。我遇到的困难是:
.on("wheel", function(d){
zoom(d);
});
忽略滚轮方向。Zoom之所以被调用,仅仅是因为滚轮被滚动(向内或向外)。
有什么方法可以访问滚动方向并将其传递到zoom()中吗?或者更好的方法?
正在寻找这个:
.on("wheel", function(d){
var direction = d3.event.wheelDelta < 0 ? 'down' : 'up';
zoom(direction === 'up' ? d : d.parent);
});
javascript比d3更重要,但这就是访问滚轮信息的方式。
d3具有缩放行为,您可能会发现它很有用。
示例代码:
var zoom = d3.behavior.zoom()
.scaleExtent([0, 10])
.on("zoom", redraw); //if you are sure that your zoom function is working just replace redraw with your zoom function
function redraw() {
return svg.attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")");
}
完整示例:
http://bl.ocks.org/mbostock/2206340