Как я могу сделать HTML-холст "прокручивать" на неопределенный срок? - PullRequest
6 голосов
/ 29 марта 2011

У меня есть элемент canvas, который автоматически загружает все окно браузера клиента при загрузке.На нем вы можете рисовать мышью, как в результате любого урока по созданию доски для рисования.Однако я хочу сделать так, чтобы, если вы переместите мышь в любой край холста (или, возможно, выберете определенный «move» -инструмент, вы можете перетащить холст в любом направлении).свитки.В частности, я хочу, чтобы теоретически можно было прокручивать бесконечно, поэтому я не могу предварительно сгенерировать, я должен генерировать «больше холста» на лету.Кто-нибудь имеет какие-либо идеи о том, как это сделать?

Если это поможет, это прямо сейчас клиентский javascript: (html - это просто холст-тег)

$(document).ready(function() {
    init();
});

function init() {
    var canvas = document.getElementById('canvas')
      , ctx = canvas.getContext('2d')
      , width = window.innerWidth
      , height = window.innerHeight;

    // Sets the canvas size to be the same as the browser size
    canvas.width = width;
    canvas.height = height;

    // Binds mouse and touch events to functions
    $(canvas).bind({
        'mousedown':  startDraw,
        'mousemove':  draw,
        'mouseup':    stopDraw,
    });
};

// Triggered on mousedown, sets draw to true and updates X, Y values.
function startDraw(e) {
    this.draw = true;
    this.X = e.pageX;
    this.Y = e.pageY;
};

// Triggered on mousemove, strokes a line between this.X/Y and e.pageX/Y
function draw(e) {
    if(this.draw) {
        with(ctx) {
            beginPath();
            lineWidth = 4;
            lineCap = 'round';
            moveTo(this.X, this.Y);
            lineTo(e.pageX, e.pageY);
            stroke();
        }
        this.X = e.pageX;
        this.Y = e.pageY;
    }
};

// Triggered on mouseup, sets draw to false
function stopDraw() {
    this.draw = false;
};

1 Ответ

2 голосов
/ 29 марта 2011

Элемент canvas использует реальную память вашего компьютера, поэтому не существует бесконечного canvas, который прокручивается вечно.Но вы можете смоделировать это поведение, используя виртуальный холст.Просто запишите координаты xy, захваченные draw (), в массив и вычислите новый центр виртуального холста, если мышь коснется границы.Затем отфильтруйте координаты XY, которые вписываются в центр + - размер экрана и нарисуйте их.

Однако массив, записывающий координаты xy, не может расти бесконечно, и код фильтра будет работать медленнее, чем размер массива.Достаточно ли 10000 точек?

Более оптимизированный код превратит координаты мыши в сплайны и сохранит только точки, необходимые для перерисовки (сглаженного) пути мыши.

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