全部组件

MotionZoom

从原位放大到全屏的图片;拖走即可关闭。

WebReact Native浮层

动手试试

正在准备示例…

最简用法

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类型默认值说明
srcstring原位显示的图片。
zoomSrcstring加载完成后显示的大图;请保持相同的宽高比。
marginnumber24放大后图片周围保留的空间,单位为像素。
disabledbooleanfalse关闭缩放。
onZoomChange(zoomed) => void放大时携带 true、关闭时携带 false 运行。
backdropStyleCSSProperties背景遮罩的内联样式。
transitionTransitionspring时间曲线 { duration, easing } 或弹簧 { tempo: 'spring', spring }。弹簧被打断时会保留动量。

其他 props 会传给渲染的元素,所以 className、style 和事件处理函数照常可用。

Web 与 React Native

浮层只在放大时存在(Web 上是顶层 dialog),所以图片可以放在任何地方,甚至在段落中。其他 props 会传给 img。

在 React Native 上请传入 source 和 zoomSource;浮层是透明的 Modal。

用到它的示例

搜索

输入关键词搜索文档。