Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3.js重新缩放形状路径并将其保持在中心位置_Javascript_D3.js - Fatal编程技术网

Javascript d3.js重新缩放形状路径并将其保持在中心位置

Javascript d3.js重新缩放形状路径并将其保持在中心位置,javascript,d3.js,Javascript,D3.js,在应用程序的这一部分中,我尝试重新缩放路径形状,并将其保留在视口中 我已通过需要调整平移以将其保持在视图端口内来相应地重新缩放形状 实现这一目标的最佳方式是什么当然,设置翻译信息是不对的——难道没有一个功能可以将投影保持在中心吗?理想情况下,这将是位于谷歌地图顶部的缩放/平移的一部分,以便在缩放时匹配地图的移动/平移。如果只是一条路径,然后我建议将坐标系的原点移动到需要缩放的多边形内。然后将变换设置为缩放(zoomLevel)将放大/缩小该点,而不改变位置。这就是你想要的吗?还有,你有没有看过

在应用程序的这一部分中,我尝试重新缩放路径形状,并将其保留在视口中

我已通过需要调整平移以将其保持在视图端口内来相应地重新缩放形状


实现这一目标的最佳方式是什么当然,设置翻译信息是不对的——难道没有一个功能可以将投影保持在中心吗?理想情况下,这将是位于谷歌地图顶部的缩放/平移的一部分,以便在缩放时匹配地图的移动/平移。

如果只是一条路径,然后我建议将坐标系的原点移动到需要缩放的多边形内。然后将
变换设置为
缩放(zoomLevel)
将放大/缩小该点,而不改变位置。这就是你想要的吗?还有,你有没有看过相关的例子?这就是我想应用这个功能的地方——我已经准备好了一些鼠标滚轮监听器。希望重新缩放/重新转换形状或使形状居中,以便与地图匹配。我的问题是-d3形状在地图的顶部,所以我必须以另一种方式触发平移/缩放。好的,这是一个变焦的演示-,有没有一种方法来调整我必须使用的例子?我已经添加了变焦行为。更通用的方法是使用对象边界框来确定中心点。有一些好方法。没有与三值旋转函数(允许您指定旋转中心)等效的缩放变换,但您可以使用
平移(-cx,-cy)缩放(scaleFactor)平移(cx,cy)
,其中(cx,cy)是您的中心点。
rescalePath: function(zoomLevel){
            //now need to rescale the path so the map and the region match?



            var ratioX = zoomLevel/this.width;
            var ratioY = zoomLevel/this.height;

            this.svg.attr("transform", "scale("+zoomLevel+") translate("+ratioX+", "+ratioY+")");

        },
        bindEvents: function(){
            var that = this;

            $(".up").click(function(e) {
                e.preventDefault();
                that.rescalePath(3);
            });

            $(".down").click(function(e) {
                e.preventDefault();
               that.rescalePath(12);
            });

        }