@GreatRash

Как реализовать зум к курсору мышки?

Хочу реализовать зум к курсору мышки, используя аффинные трансформации. Написал, вот такой код:

const screen = document.getElementById("screen");
const world = document.getElementById("world");

const m = new DOMMatrix([1, 0, 0, 1, 0, 0]);
const p = new DOMPoint();

const OnZoom = function(e) {
  const zoom = 1 + (0.02 * Math.sign(e.deltaY));
  const rect = world.getBoundingClientRect();
  
  p.x = e.clientX - rect.x;
  p.y = e.clientY - rect.y;
  
  //m.scaleSelf(zoom, zoom, 1, p1.x, p1.y);
  
  m.translateSelf(p.x, p.y);
  m.scaleSelf(zoom, zoom);
  m.translateSelf(-p.x, -p.y);
  
  world.style.transform = m.toString();
};

screen.addEventListener("mousewheel", OnZoom);


и он кое-как работает. Но если увести курсор мышки в правый нижний угол, то зум явно начинает работать не так как положено. У блока с id="world" в CSS стоит свойcтво transform-origin: 0 0;. Подскажите пожалуйста, что я упускаю?

Вот ссылка на CodePen. Вот ссылка на JSFiddle.
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы