Почему сафари объединяет рисунки на холсте с помощью мыши? - PullRequest
1 голос
/ 31 мая 2011

Видео показывает проблему производительности сафари на холсте.

Рисование занимает 100 мсек.в среднем.Когда я перемещаю курсор от точки A до B, другие браузеры рисуют холст в некоторых точках между A и B. Но в сафари он обычно рисует только около A и около B. Если время рисования такое маленькое, сафари ведет себя как другие.

Я думаю, что когда safari выполняет задание на рисование, события мыши не запускаются в браузере.Есть ли способ решить эту проблему?

Мой код:

public void draw() {
    long start = System.currentTimeMillis();

    canvas.getContext2d().clearRect(Integer.MIN_VALUE / 2,
            Integer.MIN_VALUE / 2, Integer.MAX_VALUE, Integer.MAX_VALUE);

    canvas.getContext2d().save();
    canvas.getContext2d().setFillStyle("red");
    for (int i = 0; i < 10000; i++) {
        int x = (int)(Math.random() * 1000);
        int y = (int)(Math.random() * 600);
        canvas.getContext2d().fillRect(x, y, 15, 15);
    }
    canvas.getContext2d().restore();


    logger.finer("Draw Time: " + (System.currentTimeMillis() - start));

}



    canvas.addMouseDownHandler(new MouseDownHandler() {

        @Override
        public void onMouseDown(MouseDownEvent event) {
            event.preventDefault();
            startX = event.getX();
            startY = event.getY();
            dragging = true;
        }
    });

    canvas.addMouseMoveHandler(new MouseMoveHandler() {

        @Override
        public void onMouseMove(MouseMoveEvent event) {
            if(dragging)
            {
                event.preventDefault();


                int x = event.getX();
                int y = event.getY();

                canvas.getContext2d().translate((-startX + x) / startScale,
                        (-startY + y) / startScale);
                draw();

                startX = x;
                startY = y;


            }

        }
    });

    canvas.addMouseUpHandler(new MouseUpHandler() {

        @Override
        public void onMouseUp(MouseUpEvent event) {
            dragging = false;

        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...