Каким образом реализовать панорамирование и масштабирование на Canvas?
@renee
Для реализации панорамирования и масштабирования на Canvas можно использовать три основных метода:
Пример кода для реализации панорамирования и масштабирования с использованием контекста Canvas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
// задаем начальные значения
let canvas = document.getElementById('canvas');
let context = canvas.getContext('2d');
let img = new Image();
img.src = 'path-to-image';
let scale = 1;
let offsetX = 0;
let offsetY = 0;
img.onload = function() {
drawImage();
}
// функция для перерисовки изображения
function drawImage() {
context.clearRect(0, 0, canvas.width, canvas.height); // очищаем Canvas
context.save();
context.translate(offsetX, offsetY); // панорамирование
context.scale(scale, scale); // масштабирование
context.drawImage(img, 0, 0, img.width, img.height); // рисуем изображение
context.restore();
}
// функция для обработки событий колесика мыши
canvas.addEventListener('mousewheel', function(event) {
if (event.deltaY < 0) {
scale *= 1.1; // увеличиваем масштаб
} else {
scale /= 1.1; // уменьшаем масштаб
}
drawImage(); // перерисовываем изображение
event.preventDefault(); // отключаем прокрутку страницы колесиком мыши
});
// функция для обработки событий перемещения курсора мыши
canvas.addEventListener('mousemove', function(event) {
if (event.buttons === 1) {
let dx = event.movementX;
let dy = event.movementY;
offsetX += dx; // изменяем координаты
offsetY += dy;
drawImage(); // перерисовываем изображение
}
});
|