我试图通过使用transform origin和scale CSS属性来实现常规div元素(不是canvas)的放大/缩小功能。一切都按预期工作,除了在更改光标的坐标然后重新设置后,有一些偏移。之后,放大和缩小工作正常。移动光标后问题重复出现。缩放级别越大,偏移越大。我在识别模式和调整传递给transform-origin的值时遇到了困难。
https://stackblitz.com/edit/web-platform-teguvc?file=script.js
const container = document.querySelector('.container');
const map = document.querySelector('.map');
const scaleStep = 0.2;
let scale = 1;
container.addEventListener('wheel', (event) => {
event.preventDefault();
if (!event.ctrlKey) {
return;
}
event.deltaY < 0 ? (scale += scaleStep) : (scale -= scaleStep);
const originX = container.scrollLeft + event.clientX;
const originY = container.scrollTop + event.clientY;
map.style.transformOrigin = `${originX}px ${originY}px`;
map.style.transform = `scale(${scale})`;
});
我的目标是摆脱这种光标“跳跃”。
1条答案
按热度按时间ruarlubt1#
您可能希望尝试在每次缩放后调整容器的滚动位置,而不是尝试调整transform-origin。