antvis/G6

有没有一个接口单独可以控制画布的缩放,而不是只能通过滚轮 #4702

brick-204 posted onGitHub

问题描述

目前我看画布的缩放功能好像是只能通过滚轮来控制缩放,但现在有一个业务需求,比如通过两个按钮来或者滑动条来控制画布的功能,按“+”按钮或者“-”按钮,画布进行缩放;请问有这种接口可以开放调用吗?

重现链接

重现步骤

预期行为

可以得到直接可调用画布缩放的接口

平台

  • 操作系统: [macOS, Windows, Linux, React Native ...]
  • 网页浏览器: [Google Chrome, Safari, Firefox]
  • G6 版本: [4.5.1 ... ]

屏幕截图或视频(可选)

No response

补充说明(可选)

No response


posted by fanggz2017 almost 2 years ago

https://g6.antv.antgroup.com/api/graph-func/transform#graphzoomtotoratio-center-animate-animatecfg

官方有zoom跟zoomTo两个方法满足你的需求吗

谢谢,我没有注意到这两个方法。但是单纯按钮试了下zoomTo(10),发现并没有文档说的默认以元素当前位置为中心进行缩放,有时候默认左上角,有时候干脆空白,用过fitCenter强行拉回图中心,但是缩放的效果也被清空了,求解决方法

posted by brick-204 almost 2 years ago

https://g6.antv.antgroup.com/api/graph-func/coordinate#graphgetpointbyclientclientx-clienty graph.getGraphCenterPoint() graph.getViewPortCenterPoint() 看下这两个api能满足你吗

posted by fanggz2017 almost 2 years ago

https://g6.antv.antgroup.com/api/graph-func/transform#graphzoomtotoratio-center-animate-animatecfg 官方有zoom跟zoomTo两个方法满足你的需求吗

谢谢,我没有注意到这两个方法。但是单纯按钮试了下zoomTo(10),发现并没有文档说的默认以元素当前位置为中心进行缩放,有时候默认左上角,有时候干脆空白,用过fitCenter强行拉回图中心,但是缩放的效果也被清空了,求解决方法

const point = graph.getGraphCenterPoint(); graph.zoomTo(zoom, { x: point.x, y: point.y });

posted by fanggz2017 almost 2 years ago

https://g6.antv.antgroup.com/api/graph-func/transform#graphzoomtotoratio-center-animate-animatecfg 官方有zoom跟zoomTo两个方法满足你的需求吗

谢谢,我没有注意到这两个方法。但是单纯按钮试了下zoomTo(10),发现并没有文档说的默认以元素当前位置为中心进行缩放,有时候默认左上角,有时候干脆空白,用过fitCenter强行拉回图中心,但是缩放的效果也被清空了,求解决方法

const point = graph.getGraphCenterPoint(); graph.zoomTo(zoom, { x: point.x, y: point.y });

这个只能每次都缩放中间,但有个问题,比如先放大10,将miniMap视窗对准整副图边边一个结点,再变小回1,这个时候,miniMap视窗就会去到左上角。但需要的是像mode实现的效果那样,当miniMap视窗对准哪个区域(此时miniMap视窗的内容是占满整个可视区域的),那就持续在该区域缩放,如mode:‘zoom-canvas’,鼠标放哪,就以鼠标为中心进行缩放

posted by brick-204 almost 2 years ago

先获取当前 <canvas /> 标签的中心 = viewport 的中心,比如宽高是 width height,那 viewport 中心坐标为 [width / 2, height / 2],然后转换为绘制坐标 https://g6.antv.antgroup.com/api/graph-func/coordinate#graphgetpointbycanvascanvasx-canvasy

再用转换后的坐标作为缩放中心

posted by Yanyan-Wang almost 2 years ago

先获取当前 标签的中心 = viewport 的中心,比如宽高是 width height,那 viewport 中心坐标为 [width / 2, height / 2],然后转换为绘制坐标 https://g6.antv.antgroup.com/api/graph-func/coordinate#graphgetpointbycanvascanvasx-canvasy

再用转换后的坐标作为缩放中心

这个方法我试过了,比对过两者,发现和graph.getViewPortCenterPoint()得到的中心渲染坐标是一样的。而且我现在用graph.getViewPortCenterPoint()得到的坐标进行缩放发现又行了,原因在于,我测试的时候缩放系数跨度太大,比如zoomTo(1) -> zoomTo(3) -> zoomTo(7) -> zoomTo(10), 所以每次进行点击缩放就会表现的图到处漂移。而我在观察了toolBar上的缩放按钮后,发现每次缩放跨度很小,大概在0.4、0.5之间,所以每次缩放之间位移很小,可以忽视。因此自定义的按钮实现缩放功能可以模仿到toolBar的缩放功能,谢谢两位!

posted by brick-204 almost 2 years ago

Fund this Issue

$0.00
Funded

Pull requests