给定的公式根据鼠标移动来排列容器的内容。问题在于图像的大小,并且事实上,沿着x和y轴从不同的侧面接近,排列的计算方式不同。
const zoomEffect = (event: any) => {
setZoomMode(true);
const xa = event.pageX-containerRef.current.offsetLeft;
const xb = containerRef.current.offsetWidth;
const xc = zoomRef.current?.getBoundingClientRect().width;
const ya = event.pageY-containerRef.current.offsetTop;
const yb = containerRef.current.offsetHeight;
const yc = zoomRef.current?.getBoundingClientRect().height;
setMouseCoords({
x: xc ? -(xa)/(xb/((xc)-xb)) : 0,
y: yc ? -(ya)/(yb/((yc)-yb)) : 0,
});
};
<div ref={conteinerRef} onMouseMove={zoomEffect}>
<div style={{
left: mouseCoords.x,
top: mouseCoords.y,
}}>
<Img ref_={zoomRef} />
</div>}
</div>
1条答案
按热度按时间klr1opcd1#
我不知道公式的正确性,这取决于你,但我发现它非常混乱和复杂的所有这些2字母变量。
我会这样写
变形,我是如何从你的形态变成我的。
((xc)-xb)
===(xc-xb)
a/(b/c)
===a*c/b
-(xa)
和xa === a-b
-〉-xa === b-a
或(containerRef.current.offsetLeft - event.pageX)