動手試試
最簡用法
Photo.jsx<MotionZoom
src={photo.thumb}
zoomSrc={photo.full}
width={240}
height={160}
style={{ objectFit: 'cover', borderRadius: 12 }}
/>;
它替你處理的事
- 點擊、Enter 或空白鍵會讓圖片從原位放大,填滿
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 與事件處理函式照常可用。