所以我用默认的d3.behavior.zoom()实现了带有鼠标缩放和限制的世界地图,以防止地图被完全拖出页面。这很难实现,但现在已经可以了。
我的问题是,这个项目还需要在界面中添加没用的缩放+和-按钮,而我找不到同时包含两种类型缩放的示例。它要么只有鼠标缩放,要么只有垃圾的按钮缩放。
我尝试简单地调用zoom.scale(newScale);,但它不会更新任何内容。我似乎走在正确的轨道上,因为在控制台中可以看到比例尺已更新,但它不会更新,当我用鼠标缩放时,它突然跳到使用按钮定义的比例尺。但我似乎也需要更新平移,我不确定如何获取地图的中心并计算所需的平移量以进行缩放。
如果这是更新投影的方法,我还需要知道如何在调用zoom.scale(newScale);之后更新投影。
我用缩放按钮制作了一个简化的演示,显然现在不能正常工作。 http://bl.ocks.org/jfmmm/f5c62bc056e557b80447 感谢! 编辑: 现在非常接近了,它会缩放到地图的中心,因为我使用了与计算屏幕中心相同的计算方法,但是采用了新的比例尺。问题在于我希望它缩放到屏幕中间的对象上,而不总是地图中间的国家。
我的问题是,这个项目还需要在界面中添加没用的缩放+和-按钮,而我找不到同时包含两种类型缩放的示例。它要么只有鼠标缩放,要么只有垃圾的按钮缩放。
我尝试简单地调用zoom.scale(newScale);,但它不会更新任何内容。我似乎走在正确的轨道上,因为在控制台中可以看到比例尺已更新,但它不会更新,当我用鼠标缩放时,它突然跳到使用按钮定义的比例尺。但我似乎也需要更新平移,我不确定如何获取地图的中心并计算所需的平移量以进行缩放。
如果这是更新投影的方法,我还需要知道如何在调用zoom.scale(newScale);之后更新投影。
我用缩放按钮制作了一个简化的演示,显然现在不能正常工作。 http://bl.ocks.org/jfmmm/f5c62bc056e557b80447 感谢! 编辑: 现在非常接近了,它会缩放到地图的中心,因为我使用了与计算屏幕中心相同的计算方法,但是采用了新的比例尺。问题在于我希望它缩放到屏幕中间的对象上,而不总是地图中间的国家。
function zoomBtn(action) {
var currentZoom = zoom.scale();
if( action == 'in' ){
if(currentZoom < options.maxZoomLevel){
var newScale = Math.floor(currentZoom) + 1;
var b = path.bounds(mapFeatures);
var t = [(width - newScale * (b[1][0] + b[0][0])) / 2, (height - newScale * (b[1][1] + b[0][1])) / 2];
zoom.scale(newScale)
.translate(t)
.event(svg);
}
}else{
if(currentZoom > options.minZoomLevel){
var newScale = Math.floor(currentZoom) - 1;
var b = path.bounds(mapFeatures);
var t = [(width - newScale * (b[1][0] + b[0][0])) / 2, (height - newScale * (b[1][1] + b[0][1])) / 2];
zoom.scale(newScale)
.translate(t)
.event(svg);
}
}
}
我马上更新我的示例。