我有一个图像位于div中。图像几乎总是比div大,这很好,因为溢出是隐藏的。我希望用户能够调整图像的可见部分(在div/窗口内),但阻止他们调整超过div边界的xy坐标。
function Crop() {
const [imgX, setImgX] = useState(0)
const [imgY, setImgY] = useState(0)
return (
<div>
<div className="window">
<img src={image} alt="" transform: `translate(${imgX}px, ${imgY}px)`/>
</div>
<div>
<button onClick={() => {setThumbY(thumbY - 10)}}>UP</button>
<button onClick={() => { setThumbY(thumbY + 10)}}>DOWN</button>
<button onClick={() => {setThumbX(thumbX - 10)}}>LEFT</button>
<button onClick={() => {setThumbX(thumbX + 10)}}>RIGHT</button>
</div>
</div>
)
}
转换是有效的,但它也让我可以将图片向上移动并完全移出div。现在,有没有一种方法可以设置转换的边界,并使这些边界在图片的边缘移过(或即将移过)div的边缘时出现?
或者我在想每张图片都有不同的尺寸,所以也许每张图片都需要基于尺寸的约束,但我似乎也搞不清楚。有没有简单的方法来做到这一点?保持图像的所有边缘在div/窗口内,但仍然允许转换溢出?
假设窗口大小为300 px x,图像大小为500 px,在窗口超出边界之前,窗口两边都有200 px的空间需要处理。如何才能做到这一点?
1条答案
按热度按时间8ehkhllq1#
更新
组件现在分别处理
width
和height
的范围。如果在
load
事件上没有提供imageSize
,它还会尝试获取img
的自然大小。第一个
原件
不确定我是否正确地理解了这个问题,但这里有一个快速的例子。
它通过将图像和显示框的定义大小传递给组件来设置限制,并在图像将要移动超过特定范围时禁用按钮。
可移动
range
的计算公式如下:它确实涵盖了图像大于和小于显示框的情况,但也许这可以通过将
step
纳入计算来进一步改进。为方便起见,下面的示例在代码段中运行。
第一个