В основном вы хотите что-то вроде этого
<div id='wrapper' style='position: overflow: hidden; relative; width: 500px; height: 300px;>
<canvas id='canvas' width='2000' height='600'></canvas>
<div>
тогда, когда вы хотите прокрутить, вы сделаете что-то вроде
document.getElementById('wrapper').scrollTo(x, y);
и масштабирование будет
document.getElementById('canvas').style.width = 2000 * zoom;
document.getElementById('canvas').style.height = 600 * zoom;
Вы можете поэкспериментировать с setInterval, а также с тем, чтобы прокрутка и масштабирование были плавными и плавными, но это, безусловно, самый быстрый способ получить этот эффект на большом холсте, поскольку не требуется перерисовка.