Сейчас для масштабирования и перетаскивания карты используется сторонний компонент PinchScrollZoom. Он добавляет зависимость и ограничивает управление поведением (зум, позиционирование, двойной тап и т.д.). Нужно заменить его на собственное решение — рендерить SVG напрямую через
и использовать @vueuse/gesture + @vueuse/motion для обработки жестов и плавных анимаций.
Что нужно сделать:
- Изучить:
- как работает useDrag, usePinch, useWheel из @vueuse/gesture;
- как применять useMotionProperties и useSpring из @vueuse/motion для плавных трансформаций (x, y, scale).
- Удалить компонент PinchScrollZoom из шаблона.
- Вместо этого:
- обернуть SVG в обычный контейнер <div class="zoom-container">;
- добавить обработку жестов для wheel, drag и pinch событий.
- Реализовать функционал:
- масштабирование колесиком и pinch-жестом с ограничениями (1×–3×);
- перемещение изображения при удержании (drag);
- двойной тап — сброс положения и масштаба в начальное состояние.
- Добавить плавность:
- использовать useSpring для сглаживания изменения позиции и масштаба;
- задать начальные значения { x: 0, y: 0, scale: 1 }.
- Проверить:
- изображение не «выпрыгивает» за границы контейнера;
- drag не срабатывает при обычном клике.
Чтобы картинка не прыгала, можно добавить в CSS:
img {
user-drag: none;
-webkit-user-drag: none;
}
Сейчас для масштабирования и перетаскивания карты используется сторонний компонент PinchScrollZoom. Он добавляет зависимость и ограничивает управление поведением (зум, позиционирование, двойной тап и т.д.). Нужно заменить его на собственное решение — рендерить SVG напрямую через
и использовать @vueuse/gesture + @vueuse/motion для обработки жестов и плавных анимаций.
Что нужно сделать:
Чтобы картинка не прыгала, можно добавить в CSS: