Итак, вы хотите, чтобы холст 500x500 отображал что-то (игровой уровень) действительно 9000x500 или около того.
Это хорошо. То, что вы делаете, думаете о холсте как о «окне просмотра» для большой сцены. Вы переводите холст (или все остальное) в соответствующее место и рисуете все соответствующие вещи в этом месте.
Вот пример:
http://jsfiddle.net/hKrrY/
Нажмите на холст и удерживайте левую клавишу со стрелкой, чтобы увидеть, как проходит сцена, пока красная точка игрока остается "неподвижной".
Когда вы прокручиваете холст 100x100, вы видите объекты, которые рисуются в таких местах, как (330,50). Перевод холста приводит их в поле зрения.
Полагаю, стоит упомянуть, что именно здесь оптимизация на холсте начинает действительно иметь значение. Пример, который я привел выше, является очень упрощенным способом создания области просмотра, и по мере развития вашего кода вам захочется все больше и больше думать о том, что вы рисуете и сколько вы рисуете. Например, вам следует избегать рисования объектов, которые находятся за пределами экрана, и если ваша игра или приложение имеет фоновый рисунок 9000x500, вы, вероятно, не захотите рисовать все это целиком каждый раз!
Таким образом, концепция здесь на вынос, но вам захочется очень серьезно подумать о том, как вы ее реализуете и какую работу вы выполняете для canvas. Если в приложении с боковой прокруткой возникают проблемы с производительностью, обязательно сообщите нам:)