Хочу реализовать зум к курсору мышки, используя аффинные трансформации. Написал, вот такой код:
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.