Самый простой способ сделать это - использовать панорамирование мыши.
В случае нажатия кнопки мыши начинайте панорамирование и сохраняйте положение мыши
В случае перемещения мыши переведите контекст (ctx.translate(x,y)
) на разницу между текущей позицией мыши и исходной позицией, затем перерисовайте сцену.
При событии мыши вверх прекратите панорамирование.
Есть более сложные пути. Вы можете реализовать полосы прокрутки внутри холста, как это сделал Mozilla Bespin (... который стал Mozilla Skywriter, который затем слился с Ace и отбросил все использование Canvas). Код, который они использовали, был довольно хорош.
Или вы можете реализовать полосы прокрутки DOM для использования с вашим холстом, что не совсем легко сделать правильно во всех случаях. Это включает в себя добавление нескольких фиктивных элементов, чтобы создать видимость и функционирование реальных полос прокрутки. Я сделал это, но код пока не выпущен. Но это не причина, по которой вы не можете попробовать, если это то, чего вы действительно хотите.