动手试试
最简用法
Photo.jsx<MotionZoom
src={photo.thumb}
zoomSrc={photo.full}
width={240}
height={160}
style={{ objectFit: 'cover', borderRadius: 12 }}
/>;
它替你处理的事
- 点击、回车或空格会让图片从原位放大,填满
margin 以内的屏幕。 - 放大的副本一开始与缩略图完全一致,包括
object-fit 裁剪和圆角。 zoomSrc 加载完成后淡入。- 点击、按 Escape 或拖走都会关闭;快速甩出也会关闭,短距离拖动则会弹回。
Props
| Prop | 类型 | 默认值 | 说明 |
|---|
src | string | | 原位显示的图片。 |
|---|
zoomSrc | string | | 加载完成后显示的大图;请保持相同的宽高比。 |
|---|
margin | number | 24 | 放大后图片周围保留的空间,单位为像素。 |
|---|
disabled | boolean | false | 关闭缩放。 |
|---|
onZoomChange | (zoomed) => void | | 放大时携带 true、关闭时携带 false 运行。 |
|---|
backdropStyle | CSSProperties | | 背景遮罩的内联样式。 |
|---|
transition | Transition | spring | 时间曲线 { duration, easing } 或弹簧 { tempo: 'spring', spring }。弹簧被打断时会保留动量。 |
|---|
其他 props 会传给渲染的元素,所以 className、style 和事件处理函数照常可用。