GWT鼠标移动

GWT鼠标移动,gwt,canvas,mouse,Gwt,Canvas,Mouse,我试图根据鼠标位置(仅当我拖动时)在特定点绘制字符串 问题是,它似乎在缩放x和y。当我用鼠标在0,0时,字符串显示在右边的点上,但当我移开时,字符串越来越远离我的鼠标,这使我认为有一个隐藏的缩放正在进行 我正在使用event.getX()和画布的位置,是否应该使用其他组合来获得正确的鼠标位置 下面是代码 final Canvas canvas = Canvas.createIfSupported(); final AsyncBool mouseDown = new

我试图根据鼠标位置(仅当我拖动时)在特定点绘制字符串

问题是,它似乎在缩放x和y。当我用鼠标在0,0时,字符串显示在右边的点上,但当我移开时,字符串越来越远离我的鼠标,这使我认为有一个隐藏的缩放正在进行

我正在使用event.getX()和画布的位置,是否应该使用其他组合来获得正确的鼠标位置

下面是代码

        final Canvas canvas = Canvas.createIfSupported();
        final AsyncBool mouseDown = new AsyncBool(false);

        final Context2d context = canvas.getContext2d();
        context.setFont("bold 8px sans-serif"); 

        canvas.setWidth("100%");
        canvas.setHeight("100%");

        canvas.addMouseMoveHandler(new MouseMoveHandler() {
            @Override
            public void onMouseMove(MouseMoveEvent event)
            {
                if(mouseDown.getBool())
                {

                    context.fillText("Bored.", event.getX() - canvas.getAbsoluteLeft(), event.getY() - canvas.getAbsoluteTop());
                }

            }
        });
        canvas.addMouseDownHandler(new MouseDownHandler() {
            @Override
            public void onMouseDown(MouseDownEvent event)
            {
                mouseDown.setBool(true);
            }
        });
        canvas.addMouseUpHandler(new MouseUpHandler() {
            @Override
            public void onMouseUp(MouseUpEvent event)
            {
                mouseDown.setBool(false);
            }
        });



        RootPanel.get().add(canvas);

您的代码应该适用于未调整大小的画布。但是,如果调整画布的大小,也需要相应地更新画布坐标空间。例如,对于500px、500px大小的画布,可以通过以下方式实现:

canvas.setSize("500px","500px");
canvas.setCoordinateSpaceHeight(500);
canvas.setCoordinateSpaceWidth(500);
在您的情况下,您可以使用百分比值调整画布的大小,您可以使用:

canvas.setSize("100%","100%");
canvas.setCoordinateSpaceHeight(Window.getClientHeight()); 
canvas.setCoordinateSpaceWidth(Window.getClientWidth());
由于这些方法不接受百分比值,因此需要以像素为单位计算父容器的宽度和高度