我有一个自定义图表,我使用以下代码缩放它:
final double SCALE_DELTA = 1.1;
treePane.setOnScroll(new EventHandler<ScrollEvent>()
{
@Override
public void handle(ScrollEvent event)
{
event.consume();
if (event.getDeltaY() == 0)
{
return;
}
double scaleFactor = (event.getDeltaY() > 0) ? SCALE_DELTA : 1 / SCALE_DELTA;
treePane.setScaleX(treePane.getScaleX() * scaleFactor);
treePane.setScaleY(treePane.getScaleY() * scaleFactor);
}
});
我注意到当我用鼠标滚轮滚动图表时,我不能缩放鼠标指向的图表。相反,图表会向左或向右缩放。
我没有使用过javafx,但无论如何我都会尝试回答。从我使用Win32API/GDI和XNA的经验来看,您肯定能够读取鼠标坐标。您所显示的任何内容都显示在坐标x,y处。当您想要缩放和缩放到光标的位置时,您将记住以下内容重新绘制:(假设缩放因子=z,mouseX和mouseY鼠标坐标X和Y为新坐标)
您的光标将必须指向相同的像素,因此,如果图像现在大z倍,那么鼠标坐标也将相对于图片来源大z倍。在这些坐标(本质上是从图像顶部和左侧的距离)中,您必须添加源本身的坐标,该坐标相对于窗口的左上角应该保持不变。这最终意味着mousex-x=(mousex-x)*z,这意味着X=mousex-(mousex-x)*z
Y坐标也是如此。理论上,这应该可以完美地工作,我没有用代码尝试过,但它在纸上似乎是正确的。你会注意到X和Y似乎变小了,本质上,它们甚至可能变成负数,因为通过缩放并保持鼠标在相同的像素上,您将左上角进一步向上和向左推/伸展,可能是从屏幕之外。
您可能会使用滚动条,但它们的位移原理是相同的。
稍微玩一下变量,使它们适合绘图模式,我不知道您正在使用的库是从屏幕(0,0)开始,还是从窗口开始,还是从工作区域开始,所以您必须将其适应代码的其余部分,但这是其背后的数学/几何。
我有一些路径绘制到WPF中的屏幕。使用的坐标非常小,所以它们被制作成用一个视图框填充屏幕。我现在正在尝试实现平移和缩放功能。我希望能够缩放到鼠标与ui相关的任何地方(即缩放的屏幕中心等于鼠标坐标)。当前的结果是,缩放时屏幕的中心不能反映UI上鼠标的准确位置。 视图模型 查看后面的代码
但是,当移动鼠标指针时,该功能将被破坏。 为了进一步澄清,如果我在鼠标轮上放大一个缺口,图像就会在正确的位置周围放大。这种行为在我放大鼠标轮的每一个缺口上都继续进行,完全如预期的那样。但是,如果在放大一部分后,我将鼠标移到不同的位置,功能就会中断,我必须完全缩小以改变缩放位置。 预期的行为是为了在缩放过程中鼠标位置的任何变化都能正确地反映在缩放的图像中。 虽然这对于当图像完全缩小时选择的固定鼠标位
问题内容: 我需要在滚动窗格上相对于鼠标位置放大/缩小。 我目前通过将内容包装在一个组中并缩放组本身来实现缩放功能。我用自定义枢轴创建一个新的Scale对象。(枢轴设置为鼠标位置) 这在Group的初始比例为1.0的情况下非常适用,但是之后的缩放比例无法沿正确的方向缩放-我相信这是因为Group缩放后相对鼠标位置会发生变化。 我的代码: 如何在不同的缩放级别上获得正确的鼠标位置?有没有一种更简单的
我尝试了另一篇文章中给出的这个例子,以了解关于相对于鼠标指针的缩放和平移。当所有东西都在网格上时,缩放就像预期的那样工作: 当缩放到左上角图像上的鼠标指针位置时,它将缩放到右上角图像中所见的准确位置。 如果某物被拖出网格,例如,枢轴开始“行为不端”:
我试图创建一个具有可缩放/可折叠画布的应用程序。 特点: 用鼠标滚轮在支点处放大/缩小 用鼠标左键在画布上拖动节点 用鼠标右键拖动整个画布 很明显是枢轴点计算出了问题,但我想不出是什么,怎么修复。 非常感谢!
我正在一个WordPress网站上工作,作者通常会在大多数帖子中使用iFrames嵌入Google地图。 有没有办法使用Javascript通过鼠标滚轮禁用所有这些缩放?