react-grid-gallery:受 Google Photos 启发的 React 响应式图片网格画廊组件

Justified image gallery component for React

分支10Tags44
文件最后提交记录最后更新时间
2 年前
2 年前
3 年前
2 年前
2 年前
3 年前
3 年前
3 年前
7 年前
7 年前
11 个月前
3 年前
3 年前
2 年前
2 年前
3 年前
3 年前
3 年前

React Grid Gallery

Google Photos 启发的 React 自适应图片画廊组件。


历经十余年,我决定于今日(2025年8月28日)正式终止对该库的支持。自2015年起,我便未在任何项目中使用过它,其开发与维护工作完全是出于对自由及开源软件(FOSS)的支持,以及对那些在自身项目中使用此库的用户的善意。

更多详情请参见 https://github.com/benhowell/react-grid-gallery/issues/375#issuecomment-3231131756。

欢迎继续使用、复刻、复刻并维护该库,或提交 PR 等。感谢大家,再会!


🎉 v1.0.0 版本已发布!

v1.0.0 与 v0.5.x 版本存在不兼容变更,请查阅 迁移指南 了解更多信息。v0.5.x 版本的文档请见 此处

在线演示与示例

https://benhowell.github.io/react-grid-gallery/

安装

使用 npm

npm install --save react-grid-gallery

快速开始

import { Gallery } from "react-grid-gallery";

const images = [
   {
      src: "https://c2.staticflickr.com/9/8817/28973449265_07e3aa5d2e_b.jpg",
      width: 320,
      height: 174,
      isSelected: true,
      caption: "After Rain (Jeshu John - designerspics.com)",
   },
   {
      src: "https://c2.staticflickr.com/9/8356/28897120681_3b2c0f43e0_b.jpg",
      width: 320,
      height: 212,
      tags: [
         { value: "Ocean", title: "Ocean" },
         { value: "People", title: "People" },
      ],
      alt: "Boats (Jeshu John - designerspics.com)",
   },
   {
      src: "https://c4.staticflickr.com/9/8887/28897124891_98c4fdd82b_b.jpg",
      width: 320,
      height: 212,
   },
];

<Gallery images={images} />

图片选项

属性 类型 描述
src string 必需。指向任何有效图像资源(文件、URL 等)的字符串。
width number 必需。图像的宽度。
height number 必需。图像的高度。
nano string:base64 可选。缩略图 Base64 图像将被注入到主图像下方的背景中。这在图像加载过程中提供一个 4x4 的 base64 生成图像。
alt string 可选。图像的 alt 属性。
tags array 可选。包含标签属性(value、title,如果 value 是元素则还需 key)的对象数组。例如:{value: "foo", title: "bar"}{value: <a href={tag.url}>{tag.name}</a>, title: tag.title, key: tag.key}
isSelected bool 可选。图像的选中状态。
caption string | ReactNode 可选。图像标题。
customOverlay element 可选。悬停时作为缩略图覆盖层渲染的自定义元素。
thumbnailCaption string | ReactNode 可选。显示在缩略图下方的缩略图标题。
orientation number 可选。图像的方向。许多较新型的数码相机(包括数码单反相机和傻瓜数码相机)都内置了方向传感器。该传感器的输出用于在图像文件的元数据中设置 EXIF 方向标志,以反映相机相对于地面的位置(有关更多信息,请参见 EXIF 方向页面)。

画廊选项

属性 类型 描述
images array 必需。包含图片属性的对象数组(参见上文的图片选项)。
id string 可选,默认值 ReactGridGallery<Gallery> 标签的 id 属性。对于希望区分多个画廊的用户,此属性可能有用。
enableImageSelection bool 可选,默认值 true。允许图片被选择。如果将此选项设为 false,同时提供 isSelected: true 的图片,则这些图片将被永久选中。
onSelect func 可选。图片被选中时执行的函数。可选参数:index(被选中图片在 images 数组中的索引)、image(被选中的图片)、event。仅当 enableImageSelection: true 时,此函数才可执行。
rowHeight number 可选,默认值 180。画廊中每行的高度。
maxRows number 可选。画廊中要显示的最大行数。
margin number 可选,默认值 2。画廊中每张图片的外边距。
onClick func 可选。点击画廊图片时执行的函数。可选参数:index(被点击图片在 images 数组中的索引)、image(被点击的图片)、event(点击事件)。
tagStyle func | CSSProperties 可选。用于传递给标签元素的样式,或返回样式的函数。可选参数:itemimages 中的图片项)。覆盖内部标签样式。
tileViewportStyle func | CSSProperties 可选。用于设置图片瓦片视口样式的样式或函数。可选参数:itemimages 中的图片项)。覆盖内部 tileViewportStyle 函数。
thumbnailStyle func | CSSProperties 可选。用于设置图片缩略图样式的样式或函数。可选参数:itemimages 中的图片项)。覆盖内部 thumbnailStyle 函数。
thumbnailImageComponent React component 可选。替换为一个 React 组件,该组件将接收 imageProps(原本要传递给 <img> 标签的 props)和 itemimages 中的原始项),用于渲染缩略图;这对于延迟加载很有用。
defaultContainerWidth number 可选。设置容器的默认宽度。此选项在服务器端渲染期间很有用,此时我们希望在检测到实际容器宽度之前生成初始标记。

一般说明

  • react-grid-gallery 专为现代浏览器构建,因此对 IE 的支持仅限于 IE 11 及更高版本。

  • 由于此组件的灵感来源于 Google Photos,非常小的缩略图在选中时由于应用的边框大小,可能不是最美观的。已选择 180px 作为合理的默认行高,但低至 100px 的行高仍然是可行的。

  • 画廊宽度由容器元素决定。因此,您的容器元素必须在画廊加载之前就具有宽度(可以是百分比、em、px 等任何单位)!

  • 如果您不知道图片的 widthheight 值,可以使用多种 javascript 技巧 来获取,不过要注意这些方法会带来加载性能损耗。

贡献

非常欢迎所有对 react-grid-gallery 的贡献。功能请求、问题报告和拉取请求都将受到极大的赞赏。请遵循 贡献指南

许可证

React Grid Gallery 基于 MIT 许可证,可免费用于个人和商业项目。不要求注明出处,但我们对此表示感谢。

致谢