Коротше кажучи, ви хочете, щоб translate()
контекст полотна здійснювався за вашим зміщенням, scale()
його збільшували або зменшували, а потім translate()
повертали назад, протилежно від зміщення миші. Зверніть увагу, що вам потрібно перетворити позицію курсора з простору екрана в перетворений контекст полотна.
ctx.translate(pt.x,pt.y);
ctx.scale(factor,factor);
ctx.translate(-pt.x,-pt.y);
Я розмістив на своєму веб-сайті повний робочий приклад, який ви можете вивчити, підтримуючи перетягування, клацніть, щоб збільшити, клацніть клавішу Shift, щоб прокрутити вгору / вниз.
Єдина (поточна) проблема полягає в тому, що Safari масштабується занадто швидко в порівнянні з Chrome або Firefox.